我正在尝试从文件中创建网址和名称列表。链接显示如下:
<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和table标签。请忽略标签开头的空格。
我需要输出格式为csv,但我不确定如何使用grep执行此操作:
“linktoblah.html”,“链接名称”
我有一个工作的grep,它会删除所有的links.html,但不知道我会如何提取它旁边的名字。
cat list.html | grep -o '<a .*href=.*>' | sed -e 's/<a /\n<a /g' | sed -e 's/<a .*href=['"'"'"]//' -e 's/["'"'"'].*$//' -e '/^$/ d'
由于
答案 0 :(得分:1)
您展示的线条可以用
提取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
不必要。
答案 1 :(得分:1)
我在使用PERL HTML :: TableExtract的不同帖子上找到了一种方法。
Get contents between table tags in everyfile in directory output to one file
非常感谢choroba的投入。
答案 2 :(得分:0)
新的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"