-1

次のような多くの行を含むファイルがあります。

<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とlilyweisyを抽出してから、airuikeをwww.youtube.com/user/から分離したいと思います。

だから私は3つの文字列を取得したい:www.youtube.com/user/airuike、airuike、lily weisy

これを達成する方法は?ありがとう

4

4 に答える 4

3

これを行う:

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

あなたに最初の部分を与えるでしょう。しかし、この後、あなたがそれで何をしているのかわかりません。

于 2012-12-21T00:47:29.260 に答える
1

これはhtmlであり、htmlはgrep / sed / awkではなくhtmlパーサーで解析する必要があるため、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

エアルイケの弦も欲しいのは悲しいことですが、そうでなければ、

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>*'が、私は構文を考えていなかったようです。たった 1回のエラーチェックで、すべてが壊れています。)

于 2012-12-21T00:49:14.797 に答える
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
于 2012-12-21T06:44:36.843 に答える
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

更新:チェックおよび修正

于 2012-12-21T00:52:42.337 に答える