2015-01-20 43 views
0

我是shell腳本新手,所以我需要一些幫助。通過shell腳本,我需要從類過濾的html中獲取href屬性的值。bash命令將href值降低到特定的類值

如:

<a class="other class" href="value I don't need"></a> <a class="some class" href="url I need"></a>

在這種情況下,我需要的是得到了類「有些班」的標籤的href值。 我需要把值放入一個變量,需要使用sed o grep,我對reggex一點都不好,所以我需要你的幫助。

+2

[不使用正則表達式來解析HTML(http://stackoverflow.com/a/1732454/1032785) – jordanm 2015-01-20 22:41:00

回答

0

sed使用和grep的另一種方式。

var=`grep 'class="some class"' <file> | sed -r 's/^.+href="([^"]+)".+$/\1/'` 

首先grep的找到正確的線,則sed的替換僅括號內的位的整行(這是HREF的值)。

編輯:如果你在一行上有多個<a>標籤,它會變得更加棘手。如果你可以假設標籤的格式始終像的例子,那麼你可以試試這個:

var=`grep 'class="some class"' <file> | sed -r 's/^.+class="some class"\s+href="([^"]+)".+$/\1/'` 

如果你不能想當然地認爲(也許有時在href來自前級),那麼你使用html解析器更好 - 正則表達式不能真正解析html。

+0

,我必須把輸入文件? – dakairus 2015-01-21 00:42:12

+0

我試過但顯示空白的結果,輸入文件是一個html文件 – dakairus 2015-01-21 23:48:50

+0

啊對不起,它通過空白的結果,因爲在線存在2 標籤,這可能會打破過程? – dakairus 2015-01-22 00:23:39

0

這裏有一種方法:

awk -F'href="' '/class="some class/ {split($2,a,"\"");print a[1]}' file 
url I need 
0

使用grep 'some class'|sed -n 's/.*href="\(.*\)".*/\1/p'

$ cat aaa 
<a class="other class" href="value I don't need"></a> 
<a class="some class" href="url I need"></a> 

$ cat aaa|grep 'some class'|sed -n 's/.*href="\(.*\)".*/\1/p' 
url I need