shell学习十三天----sed案例分析

sed的使用案例

使用sed操作/etc/passwd,最好复制一份(cp /etc/passwd /tmp),操作tmp下的passwd(其实不用,因为在一般情况下sed只是修改了输出结果,不会改变文件本身,除非要求这么做).

 

 

以行为单位的新增/删除

要求:/etc/passwd的内容列出并且列印行号,同时删除2~5.

做法:cat /etc/passwd | sed ‘2,5d’

sed的动作是’2,5d’(动作需要放在单引号之间)

nl命令在linux系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 等等的功能。 

只删除第二行:

nl /etc/passwd | sed ‘2d’

 

删除第3行到最后一行

cat -n /etc/passwd | sed ‘3,$d’ 

 

在第二行后(就是在第三行)加上”i am fine”字样

cat -n /etc/passwd | sed ‘2a i am fine’

 

如果要在第二行前面

nl /etc/passwd | sed ‘2i i am fine’

 

如果是要增加两行以上,在第二行后面加入两行字,例如『hello』与『how are you

nl /etc/passwd | sed ‘2a hello\

>how are you’

每一行之间都必须要以反斜杠(\)来进行新行的添加,所以上面的例子,我们可以发现在第一行的最后面就有 存在。

(再输入的是会需要注意,单引号不要一起输完).

 

以行为单位的替换与现实

将第2-5行的内容替换成”hahaha”

nl /etc/passwd | sed ‘2,5c hahaha’

通过这个方法,我们就可以替换整行数据了.

 

仅列出/etc/passwd文件的5-7

cat -n /etc/passwd | sed -n ‘5,7p’

可以透过这个 sed 的以行为单位的显示功能, 就能够将某一个文件内的某些行号选择出来显示。

 

 

数据的搜寻与显示

 

搜索/etc/passwd中有关/root关键字的行

nl /etc/passwd | sed ‘/root/p’

思考:为什么会输出所有行的情况?

使用-n的时候将只打印包含模板的行。

nl /etc/passwd | sed -n ‘/root/p’

 

数据的搜索与删除

删除/etc/passwd所有包含root的行,其他行输出

nl /etc/passwd | sed ‘/root/d’ 

 

数据的搜索并执行命令

搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行:

 nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'

如果只替换/etc/passwd的第一个bash关键字为blueshell,就退出

nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}'    1  

最后的q是退出。

 

数据的搜索并替换

除了整行的处理模式之外,sed还可以用行为单位进行部分数据的搜寻并替换.基本上sed的搜寻与替换与vi相当的类似.

sed ‘s/要被取代的字符串/新的字符串/g

 

先通过/sbin/ifconfig eth0查看本机的IP地址,我的是(192.168.199.5)

IP前面部分予以删除

/sbin/ifconfig eth0 | grep 'inet addr'|sed 's/^.*addr://g'

IP后面部分予以删除

/sbin/ifconfig eth0 | grep 'inet addr'|sed 's/^.*addr://g' | sed 's/Bcast.*$//g'

即可得到IP

 

多点编辑

一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换成hahaha.

nl /etc/passwd | sed -e ‘3,$d’ -e ‘s/bash/hahaha/g’

注意:每天命令前面都加入了-e选项

 

 

直接修改文件内容

最好别使用,如果使用需要加入一个-i选项

例如在最后一行插入hahaha

nl /etc/passwd | sed -i ‘$i hahaha’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值