我有一个文件中的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"
但是我想一次挑选两个部分并将它们写到一行中的文件中,用空格(空格)分隔。这是多线的事情,让我疯狂。
请:我需要你的帮助,是吗:)
提前谢谢你, 赖。
答案 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
之后添加了:
,
因为我猜这是你的意图。