grep多线模式

时间:2016-10-28 18:27:59

标签: regex bash sed wget multiline

我有一个文件中的URL列表(每行=不同的域)我想扫描(不是递归)并选择两个模式,它们位于不同的行中。经过两天的尝试 - 我的头在旋转......

这是重要的HTML部分:

<a href="http://subdomain.domain.tld/">Home</a>
</li>
<li>
<a data-uv-trigger='true' href='mailto:john@doe.com'>

我需要选择域名(subdomain.domain.tld)和电子邮件地址(john@doe.com)。我可以分两步完成(wget / sed)部件。

wget -O - -i urls-to-scan-manuell.txt | sed -n "s/\(.*a href=\"\)\(.*\)\(\">Home.*\)/\2/p"

wget -O - -i urls-to-scan-manuell.txt | sed -n "s/\(.*true' href='mailto\)\(.*\)\('>.*\)/\2/p"

但是我想一次挑选两个部分并将它们写到一行中的文件中,用空格(空格)分隔。这是多线的事情,让我疯狂。

请:我需要你的帮助,是吗:)

提前谢谢你, 赖。

1 个答案:

答案 0 :(得分:2)

记录:它是not recommended to parse HTML using regex

您可以将import Text.Pandoc.JSON main = toJSONFilter go where go (Link alt desc (url, title)) = Span ("",[],[]) [Link alt desc (url, title), Note [Plain [Link alt [Str url] (url, "")]]] go x = x sed多个表达式一起使用,这可能对此有所帮助:

-e

这将生成两行,一行用于域,一行用于电子邮件。 如果您更喜欢一行输出,可以输入wget -O - -i urls-to-scan-manuell.txt | sed -n \ -e "s/\(.*a href=\"\)\(.*\)\(\">Home.*\)/\2/p" \ -e "s/\(.*true' href='mailto\)\(.*\)\('>.*\)/\2/p" 。默认分隔符是TAB,您可以使用paste - -标志更改它,例如:

-d

将产生:

wget -O - -i urls-to-scan-manuell.txt | sed -n \
  -e "s/\(.*a href=\"\)\(.*\)\(\">Home.*\)/\2/p" \
  -e "s/\(.*true' href='mailto:\)\(.*\)\('>.*\)/\2/p" | \
paste -d, - -

我冒昧地在模式中http://subdomain.domain.tld/,john@doe.com 之后添加了:, 因为我猜这是你的意图。