如何从sed中提取html的路径?

时间:2014-03-29 07:22:34

标签: regex replace sed path extract

这让我发疯了。我试图使用sed和som正则表达式从某些html中提取路径。我的原始文本是一个文件,sample.txt,如下所示:

<tr><td valign="top"><img src="/icon/file.ico" alt="[FILE]"></td><td><a href="/namespace/media/cloud-sync.xml">cloud&#x2d;sync&#x2e;xml</a></td><td align="right">Sat,&nbsp;29&nbsp;Mar&nbsp;2014&nbsp;06:08:13&nbsp;GMT</td><td align="right">8210</td></tr>
<tr><td valign="top"><img src="/icon/file.ico" alt="[FILE]"></td><td><a href="/namespace/media/levels-sync.xml">levels&#x2d;sync&#x2e;xml</a></td><td align="right">Sat,&nbsp;29&nbsp;Mar&nbsp;2014&nbsp;06:08:47&nbsp;GMT</td><td align="right">2203</td></tr>

首先我尝试了:

cat sample.txt | sed -n ’s/(\/namespace\/media\/.*-sync.xml)/\1/p’

但是这给了我:`sed:-e表达式#1,char 40:无效的引用\ 1在`s&#39;命令的RHS`

然后我做了:

cat sample.txt | sed -n 's/\(\/namespace\/media\/.*-sync.xml\)/\1/p'

但这似乎只是将整个文件还给我。

我想要的结果是回来

/namespace/media/nab-sync.xml
/namespace/media/levels-sync.xml

那里有任何可以帮助我的sed忍者?

5 个答案:

答案 0 :(得分:0)

gnu awk会在该行的任何位置找到正确的数据 它不是sed,但对于此awk可能更好,或更容易理解。

awk -v RS='href="' -F\" 'NR>1 {print $1}' file
/namespace/media/cloud-sync.xml
/namespace/media/levels-sync.xml

awk应适用于任何系统:

awk -F\" '{for(i=1;i<=NF;i++) if ($i~"href=") print $(i+1)}' file
/namespace/media/cloud-sync.xml
/namespace/media/levels-sync.xml

答案 1 :(得分:0)

根据您的特定输入,这是正确的sed命令:

cat sample.txt | sed 's/.*\(\/namespace\/media\/.*-sync.xml\).*/\1/g'

在sed中,这些群组会在\(...\)之间捕获,但您使用的是(...)

另外,我添加了.*添加原始正则表达式的两端以丢弃所有其他文本。

答案 2 :(得分:0)

我建议使用gnu grep

grep -Po 'href="\K[^"]*' file

/namespace/media/cloud-sync.xml
/namespace/media/levels-sync.xml

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed 's/.*href="\([^"]*\)".*/\1/' file

查找href并在下一对双引号之间提取字符串。

答案 4 :(得分:-1)

暂时会这样做:

cat sample.txt | awk -F'["]' '{print $8}'

我对sed不是很熟悉,所以我发布了一个awk响应。