-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和lily weisy,然后我也想把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
$ 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 回答
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

有点难过,你也想要艾瑞克琴弦,否则就这么简单

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>*',但似乎我还没有考虑过语法。只是 一个错误检查,它破坏了一切。)

于 2012-12-21T00:49:14.797 回答
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 回答