本文摘自PHP中文网,作者齐天大圣,侵删。
作为shell编程三剑客之一的sed,重要程度不言而喻。sed是一个流编程器,每次处理一行,处理完后再接着处理下一行,它支持正则,功能非常的强大。但sed比一般的命令复杂一些,选项繁多,想要掌握它是需要花点功夫的。下面我们通过众多的例子来看看这个强大的sed命令的作用吧!语法格式:sed [选项] [动作]
常用选项如下:
动作中的参数及太多了,下面列一下:
a:在匹配行下面加入一行
c:将匹配的行修改新的内容
d:删除匹配的行
i:在匹配行前加入内容
p:打印
s:替换匹配行的内容
范例一:打印/etc/passwd文件的第5-10行
1 2 3 4 5 6 7 | # sed -n '5,10p' /etc/passwd
lp:x:4:7:lp:/ var /spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/ var /spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
|
范例二:删除/etc/passwd文件的第2行,第2到10行
1 | # cat -n /etc/passwd | sed '2d' | sed '5,10d'
|
除了上面的方法,我们还可以用-e选项来完成
1 | # cat -n /etc/passwd | sed -e '2d' -e '5,10d'
|
范例三:获取服务器ip地址
这个案例非常的棒,建议大家仔细看看
1 2 3 4 5 | # ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.26.9.143 netmask 255.255.240.0 broadcast 172.26.15.255
ether 00:16:3e:0a:01:ad txqueuelen 1000 (Ethernet)
……
|
我们需要的是172.26.9.143。
第一步,获取我们想要处理的行
1 2 | # ifconfig eth0 | sed -n '/.*inet/p'
inet 172.26.9.143 netmask 255.255.240.0 broadcast 172.26.15.255
|
第二步,将不需要的信息给替换位空白字符
1 2 | # ifconfig eth0 | sed -n '/.*inet/p' | sed 's/.*inet\s\+//g'
172.26.9.143 netmask 255.255.240.0 broadcast 172.26.15.255
|
接下来把ip地址后面的全部替换位空就行了
1 2 | # ifconfig eth0 | sed -n '/.*inet/p' | sed 's/.*inet\s\+//g' | sed 's/\s\+.*//g'
172.26.9.143
|
下面我们来说说上面的例子,首先第一步我们使用了-n和p来获取我们想要的行。然后,我们将不需要的信息进行过滤,需要注意的时,正则中\s+表示至少匹配一个空格,但在这里需要在加号前使用转义字符\。
范例四
最后一个范例,我给出我昨天一个真实案例。需求是这样的,获取一段文本中的url地址,但不需要前面的http://。部分文本内容如下:
1 2 3 4 5 6 7 8 | <td width=820> <a href=http:
<a href=http:
<a href=http:
<a href=http:
<tr><td width=80 height=30 align=right>
<b><font style= "font-size:14px;" >山东</font>:</b> </td><td width=820>
<a href= "http://jinan.hellozx.com" onclick= "co('jinan')" ><font color=red style= "font-size:14px;" >济南</font></a>
<a href= "http://qingdao.hellozx.com" onclick= "co('qingdao')" ><font color=red style= "font-size:14px;" >青岛</font></a>
|
下面我们分几步去完成该需求,首先,将不含url地址的行全部过滤
1 | # sed -n '/http:/p' a.txt
|
然后,将不需要的信息全部替换位空白字符即可。先把http://及之前字符全部删除
1 | sed -n '/http:/p' a.txt | sed 's/.*http:\/\///g'
|
,接着把双引号及之后字符全部删除
1 | # sed -n '/http:/p' a.txt | sed 's/.*http:\/\///g' | sed 's/".*//g'
|
现在屏幕输出的内容如下
haikou.hellozx.com sanya.hellozx.com kunming.hellozx.com dali.hellozx.com xining.hellozx.com yinchuan.hellozx.com wulumuqi.hellozx.com ……
以上就是一文读懂shell编程三剑客之一的sed命令的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
linux默认的shell是什么
一文读懂shell编程三剑客之一的sed命令
linux shell中的curl和wget如何使用代理ip的方法教程
linux中如何运行shell程序
linux中什么是shell
如何在shell脚本中使用逻辑或&和
如何调试shell脚本?
linux中终端与shell的概念
shell script到底是什么?怎么使用?
linux终端执行shell脚本时提示权限不足
更多相关阅读请进入《shell》频道 >>
转载请注明出处:木庄网络博客 » 一文读懂shell编程三剑客之一的sed命令