2012-12-21 85 views
-1

我有很多線文件,如:提取物串時,awk,sed的或等

<a href="http://www.youtube.com/user/airuike" class="yt-uix-sessionlink yt-user-name " data-sessionlink="ei=CKPW6LXqqbQCFSqVIQod_BwsaQ%3D%3D" dir="ltr">lily weisy</a> 

我想提取www.youtube.com/user/airuike和百合weisy,然後我也想從www.youtube.com/user/

,所以我希望得到3串分開airuike:www.youtube.com/user/airuike,airuike和百合weisy

如何實現這一目標?感謝

+3

你有沒有用awk或者grep的?有更好的方法來解析HTML。 –

+0

我不知道該怎麼做 – wenzi

+0

[Google](http://google.com)是學習如何做不知如何做的事情的好資源。 – jahroy

回答

3

做到這一點:

sed -e 's/.*href="\([^"]*\)".*>\([^<]*\)<.*/link:\1 name:\2/' < data 

會給你的第一部分。但我不確定你在這之後用它做了什麼。

+0

如果開發人員寫了<! -

+0

但_should_它的工作?當然這個問題還不清楚,但我相信正則表達式對於HTML來說並不是正確的工作,除了一次性黑客(但不是真正項目的一部分) –

1

由於它是html,並且html應該使用html解析器解析,而不是使用grep/sed/awk解析,所以可以使用我的Xidel的模式匹配功能。

xidel yourfile.html -e '<a class="yt-uix-sessionlink yt-user-name " dir="ltr">{$link := @href, $user := substring-after($link, "www.youtube.com/user/"), $name:=text()}</a>*' 

或者,如果你想要一個像結果的CSV:

xidel yourfile.html -e '<a class="yt-uix-sessionlink yt-user-name " dir="ltr">{string-join((@href, substring-after(@href, "www.youtube.com/user/"), text()), ", ")}</a>*' --hide-variable-names 

這是一種悲哀,你也想擁有airuike字符串,否則它會像

一樣簡單
xidel /yourfile.html -e '<a href="{$link}" class="yt-uix-sessionlink yt-user-name ">{$name}</a>*' 

(你應該可以使用xidel '<a href="{$link:=., $user := filter($link, www.youtube.com/user/(.*)\', 1)}" class="yt-uix-sessionlink yt-user-name " dir="ltr">{$name}</a>*',但它似乎我沒有想過通過的語法。只是一個錯誤檢查,它打破了一切。 )

0

我覺得這樣的事情必須努力

while read line 
do 
    href=$(echo $line | grep -o 'http[^"]*') 
    user=$(echo $href | grep -o '[^/]*$') 
    text=$(echo $line | grep -o '[^>]*<\/a>$' | grep -o '^[^<]*') 

    echo href: $href 
    echo user: $user 
    echo text: $text 
done < yourfile 

正則表達式基礎知識:http://en.wikipedia.org/wiki/Regular_expression#POSIX_Basic_Regular_Expressions

UPD:檢查並修復

+0

的環境中,這也不會與'Lucy的新「http解析器」匹配!'? –

+0

你是對的,但我認爲格式是同質的。如果你知道所有的行都是相同的格式,那麼正則表達式可以更簡單 –

1
$ awk '{split($0,a,/(["<>]|:\/\/)/); u=a[4]; sub(/.*\//,"",a[4]); print u,a[4],a[12]}' file 
www.youtube.com/user/airuike airuike lily weisy