分页: 1 / 1

如何使用sed提取一行中的多个匹配项

发表于 : 2011-06-04 16:01
fanpy
例如,文本如下:

代码: 全选

<a href="www.baidu.com"></a><a href="www.google.com"></a><a href="forum.ubuntu.org.cn"></a>
我希望用sed只将其中的url提取出来,结果如下:

代码: 全选

www.baidu.com
www.google.com
forum.ubuntu.org.cn
请问应该如何解决?

Re: 如何使用sed提取一行中的多个匹配项

发表于 : 2011-06-04 17:33
lilydjwg
提取文本用 grep。

代码: 全选

grep -oP '(?<=href=")[^"]+'
PS: 这样的 URL 只有域名,没有协议(scheme),是会出问题的。

Re: 如何使用sed提取一行中的多个匹配项

发表于 : 2011-06-05 17:27
phf1102
2楼能否解释下这条语句的意思阿?是在看不懂 :em06

Re: 如何使用sed提取一行中的多个匹配项

发表于 : 2011-06-05 17:30
eexpress
看2天正则。就都明白了。

正则无处不在。

Re: 如何使用sed提取一行中的多个匹配项

发表于 : 2011-06-05 23:00
fnan
不是非perl不可:
kose5@kose5-Aspire-4552:~$ echo '<a href="www.baidu.com"></a><a href="www.google.com"></a><a href="forum.ubuntu.org.cn"></a>' |grep -o '="[^"]*"'|tr -d '="'
www.baidu.com
www.google.com
forum.ubuntu.org.cn

Re: 如何使用sed提取一行中的多个匹配项

发表于 : 2011-06-05 23:26
lilydjwg
fnan 写了:不是非perl不可:
kose5@kose5-Aspire-4552:~$ echo '<a href="www.baidu.com"></a><a href="www.google.com"></a><a href="forum.ubuntu.org.cn"></a>' |grep -o '="[^"]*"'|tr -d '="'
http://www.baidu.com
http://www.google.com
forum.ubuntu.org.cn
我只是比较习惯 PCRE 而已。而且,能少用个进程就少用点。

Re: 如何使用sed提取一行中的多个匹配项

发表于 : 2011-06-07 11:33
fnan
少用个进程,真还得用sed:
kose5@kose5-Aspire-4552:~$ echo '<a href="www.baidu.com"></a><a href="www.google.com"></a><a href="forum.ubuntu.org.cn"></a>' |sed 's/[^"]*="\([^"]*\)"[^"]*/\1/g;s/"/\n/g'
www.baidu.com
www.google.com
forum.ubuntu.org.cn

Re: 如何使用sed提取一行中的多个匹配项

发表于 : 2011-06-07 13:40
lilydjwg
fnan 写了:少用个进程,真还得用sed:
谁说的?awk 也可以做到的。

Re: 如何使用sed提取一行中的多个匹配项

发表于 : 2011-06-07 23:09
fnan
实际上,awk几乎可以做任何事:
kose3@kose3-desktop:~$ echo '<a href="www.baidu.com"></a><a href="www.google.com"></a><a href="forum.ubuntu.org.cn"></a>' |awk -F'"' '{i = 1; while (i <= NF) {if ($i ~/=$/) print $(i+1);i++}}'
www.baidu.com
www.google.com
forum.ubuntu.org.cn

Re: 如何使用sed提取一行中的多个匹配项

发表于 : 2011-06-12 11:52
lexdene
围观各种脚本帝。