使用sed提取指定内容的一种写法
目的:使用linux中的sed命令提取指定内容
假设有字符串:<li><a target="_blank" href="http://www.dbainfo.net">Sybase数据库技术,数据
库恢复</a></li>
我想从该字符串中提取出来红色标记的内容,也就是:Sybase数据库技术,数据库恢复
linux命令sed和awk都可以实现该需求,本文仅利用sed命令中替换相应正则表达式的方法来实现。
abc="<li><a target=\"_blank\" href=\"http://www.dbainfo.net\">Sybase数据库技术,数据库恢复</a></li>"
方法为:
echo $abc| sed 's/\(.*\)href=".*">\(.*\)<\/a>.*/\2/g'
上面sed命令中,正则表达式\(.*\)href=".*">\(.*\)<\/a>.*中第一个红色标记的\(.*\) 因为在href=之前,所以表示源字符串中的<li><a target="_blank"
第一个\(.*\) 之后的href=".*"> 对应源字符串中的href="http://www.dbainfo.net"> 第二个红色标记的\(.*\) 因为在href="http://www.dbainfo.net">之后且</a>的前面,就是我们需要的内容。最后的<\/a>.* 匹配源字符串中的</a></li>
测试结果为:
[root@VPS-CentOS5 ~]# abc="<li><a target=\"_blank\" href=\"href="http://www.dbainfo.net">http://www.dbainfo.net\">Sybase数据库技术,数据库恢复</a></li>"
[root@VPS-CentOS5 ~]# echo $abc| sed 's/\(.*\)href=".*">\(.*\)<\/a>.*/\2/g' Sybase数据库技术,数据库恢复
我们发现源字符串中左右尖括号都是成对出现的,可以如法炮制,另外一条命令为:
echo $abc | sed 's/<\(.*\)><\(.*\)>\(.*\)<\(.*\)><\(.*\)>/\3/'
中间红色加粗的\(.*\) 对应我们需要的内容。搜索的正则表达式中对应5部分,分别为:
- li
- a target="_blank" href="http://www.dbainfo.net"
- Sybase数据库技术,数据库恢复
- /a
- /li
第3条正是我们所需要的结果。关于这5部分的输出为:
[root@VPS-CentOS5 ~]# echo $abc | sed 's/<\(.*\)><\(.*\)>\(.*\)<\(.*\)><\(.*\)>/\1/'
li
[root@VPS-CentOS5 ~]# echo $abc | sed 's/<\(.*\)><\(.*\)>\(.*\)<\(.*\)><\(.*\)>/\2/'
a target="_blank" href="http://www.dbainfo.net"
[root@VPS-CentOS5 ~]# echo $abc | sed 's/<\(.*\)><\(.*\)>\(.*\)<\(.*\)><\(.*\)>/\3/'
Sybase数据库技术,数据库恢复
[root@VPS-CentOS5 ~]# echo $abc | sed 's/<\(.*\)><\(.*\)>\(.*\)<\(.*\)><\(.*\)>/\4/'
/a
[root@VPS-CentOS5 ~]# echo $abc | sed 's/<\(.*\)><\(.*\)>\(.*\)<\(.*\)><\(.*\)>/\5/'
/li
[root@VPS-CentOS5 ~]# echo $abc | sed 's/<\(.*\)><\(.*\)>\(.*\)<\(.*\)><\(.*\)>/\6/'
sed: -e expression #1, char 44: invalid reference \6 on `s' command's RHS
-bash: echo: write error: Broken pipe
[root@VPS-CentOS5 ~]# echo $abc | sed 's/<\(.*\)><\(.*\)>\(.*\)<\(.*\)><\(.*\)>/\0/'
<li><a target="_blank" href="http://www.dbainfo.net">Sybase数据库技术,数据
库恢复</a></li>
通过以上可以了解关于sed命令中替换字符时所用的正则表达式的一些方法了。
呵呵呵,比我专业性更强的博客。完全是代码世界。不过很多值得学习。请问能和博主交换个友链么?
可以交换链接。我现在用的sybase数据库的用户群不是很多。有时候也研究一下oracle,mysql等数据库。
还有,建议博主把段落文章写个溢出换行的样式,不然页面有点错乱!
恩,我用的blockquota这个样式好像不会换行。有空研究一下长语句换行,否则页面太难看了。
http://hi.baidu.com/traindiy/blog/item/73f46406f6cafc700308810c.html