2016-05-17 96 views
1

賽後以前的href我有一個不formmated的html文件,我需要得到HREF鏈接,這只是在比賽前...我的HTML文件看起來像:獲取用grep,awk或者sed

<a href="url1.com">Bla Bla Bla [Test1]</a><a href="url2.com">Bla Bla Bla [Test2]</a><a href="url3.com">Bla Bla Bla [Test3]</a> 

所以現在我需要在[Test2]模式之前獲得href內容,並且預期的回報是url2.com。

我不是一個sed或awk專家,我不認爲這是可能的純粹的grep命令。

我可以使用下面的命令知道我的部分是否存在於文件內部,但我不知道如何獲得以前的href。

grep -o '\[S06E04\]' file.html 

我真的很感激任何幫助。

感謝

+0

通常,這不是一個好主意,以處理未行分隔的數據,如XML,這些工具需要以行分隔的數據。改爲使用'xmlstarlet'之類的東西。 –

+0

@MichaelVehrs:這個html好像被縮小了... – Jahid

回答

0

這應該工作:

sed -n 's/.*href="\([^"]*\)">.*\[Test2\].*/\1/p' file 
url2.com 

隨着GNU的grep:

grep -oP '(?<=href=")[^"]*(?=">[^<>]*\[Test2\])' file 
url2.com 
0
$ awk -F'[[\\]"]' '{for (i=1; i<=NF; ++i) {if ($i == "Test2") print $(i-2)}}' w.txt 

url2.com 
0

使用grep與PCRE(-P):

grep -Po 'href="\K[^"]+(?="[^[]+\[Test2\])' file.html 
  • href="匹配字面上所需URI之前,\K丟棄匹配

  • [^"]+得到期望部分

  • 零寬度正預測先行圖案,(?="[^[]+\[Test2\]),確保了匹配之後是什麼在方括號內但是[Test2]


使用 sed

類似的邏輯:

sed -E 's/.*[[:blank:]]href="([^"]+)"[^[]+\[Test2\].*/\1/' file.html 

實施例:

$ grep -Po 'href="\K[^"]+(?="[^[]+\[Test2\])' <<<'<a href="url1.com">Bla Bla Bla [Test1]</a><a href="url2.com">Bla Bla Bla [Test2]</a><a href="url3.com">Bla Bla Bla [Test3]</a>' 
url2.com 

$ sed -E 's/.*[[:blank:]]href="([^"]+)"[^[]+\[Test2\].*/\1/' <<<'<a href="url1.com">Bla Bla Bla [Test1]</a><a href="url2.com">Bla Bla Bla [Test2]</a><a href="url3.com">Bla Bla Bla [Test3]</a>' 
url2.com