我正在尝试从文件中创建网址和名称列表。链接显示如下:
<table class="list">
<tr><th valign="top">I</th><td><a href="main.asp">link45.php</a>, <a href="link.html">link</a>, <a href="link8.asp">link8</a>, <a href="link2.html">link 2</a></td></tr>
<tr><th valign="top">I</th><td><a href="main.asp">link45.php</a>, <a href="link.html">link</a>, <a href="link8.asp">link8</a>, <a href="link2.html">link 2</a></td></tr>
</table>
(可能还有一些 tr 和表标签,请忽略标签开头的空格。
我需要输出采用类似 csv 的格式,但我不确定如何使用 grep 执行此操作:
"linktoblah.html"、"link名称"
我有一个工作的 grep,它可以拉出所有链接.html但不确定如何拉出它旁边的名称。
cat list.html | grep -o '<a .*href=.*>' | sed -e 's/<a /n<a /g' | sed -e 's/<a .*href=['"'"'"]//' -e 's/["'"'"'].*$//' -e '/^$/ d'
谢谢
您显示的行可以通过以下方式提取
sed -e 's/.*=(".*")>(.*)<.*$/1, "2"/'
例:
echo '< a href="linktoblah.html">name of link < /a>.' | sed -a 's/.*=(".*")>(.*)<.*$/1, "2"/'
生产
"linktoblah.html", "name of link "
根据文件中的其他内容,您可以将 grep
命令替换为 sed
中的选择器,如下所示:
sed -n -e '/href=/ s/.*=(".*")>(.*)<.*$/1, "2"/p'
其中
/href=/
可以是仅与所需行匹配的任何正则表达式。字符串末尾的p
表示"并打印",-n
标志表示"除非有匹配项,否则不要做任何事情"。两者的结合使得单独的grep
变得没有必要。
我在使用PERL HTML::TableExtract的不同帖子中找到了一种方法。
获取目录中每个文件中表标记之间的内容输出到一个文件
非常感谢乔洛巴的投入。
一个新的awk
不确定这是否是您正在寻找的,但这是我从新数据中得到的:
awk -F"["<>]" -v RS="href="" 'NR>1 {print """$1"",""$3"""}' file
"main.asp","link45.php"
"link.html","link"
"link8.asp","link8"
"link2.html","link 2"
"main.asp","link45.php"
"link.html","link"
"link8.asp","link8"
"link2.html","link 2"