sh/bash/dash/ksh/zsh等Shell脚本
-
fanpy
- 帖子: 4
- 注册时间: 2010-07-29 13:53
#1
帖子
由 fanpy » 2011-06-04 16:01
例如,文本如下:
代码: 全选
<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
请问应该如何解决?
-
lilydjwg
- 论坛版主
- 帖子: 4249
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
-
联系:
#2
帖子
由 lilydjwg » 2011-06-04 17:33
提取文本用 grep。
代码: 全选
grep -oP '(?<=href=")[^"]+'
PS: 这样的 URL 只有域名,没有协议(scheme),是会出问题的。
-
phf1102
- 帖子: 37
- 注册时间: 2011-05-14 15:53
#3
帖子
由 phf1102 » 2011-06-05 17:27
2楼能否解释下这条语句的意思阿?是在看不懂
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#4
帖子
由 eexpress » 2011-06-05 17:30
看2天正则。就都明白了。
正则无处不在。
● 鸣学
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#5
帖子
由 fnan » 2011-06-05 23:00
不是非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
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
lilydjwg
- 论坛版主
- 帖子: 4249
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
-
联系:
#6
帖子
由 lilydjwg » 2011-06-05 23:26
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 而已。而且,能少用个进程就少用点。
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#7
帖子
由 fnan » 2011-06-07 11:33
少用个进程,真还得用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
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
lilydjwg
- 论坛版主
- 帖子: 4249
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
-
联系:
#8
帖子
由 lilydjwg » 2011-06-07 13:40
fnan 写了:少用个进程,真还得用sed:
谁说的?awk 也可以做到的。
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#9
帖子
由 fnan » 2011-06-07 23:09
实际上,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
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。