2014-02-09 46 views
0

我想从文件创建一个网址和名称的列表。这些链接显示如下:Grep链接和链接名称来创建CSV文件

<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”,

“链接的名字:”我有一个工作的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' 

由于

回答

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不必要。

+0

的空间实际上并不存在,我只是把他们在如此计算器不会隐藏链接。所有链接都在一个表格中,因此它实际上会显示为< td>链接和链接名称< /td>。该sed给我无效的选项-a? –

+0

不知道那里发生了什么。使用'-e'标志(见编辑后)。我以为我从我的命令行完成了一个复制/粘贴... – Floris

+0

它拉出更多标签,只获得第一个结果(有成千上万)

“page.aspx?= blah” ,“blah”

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" 
+0

@John J删除我的旧回答,做不同的数据。这可能是更多你正在寻找。 – Jotne