2017.11.21 六周第二次课

9.4/9.5 sed

egrep 查找符合条件的行

sed 查找指定第几行-第几行

sed 可以实现 grep 的大部分功能,而且还可以查找替换。唯一缺陷是不能有颜色区分显示。

重点在 -i的直接替换选项。

-n 只打印符合规则的行,一定和p一起使用。

打印指定行 p表示print,想起来sed,就记住np【翔翔】

#sed '10'p -n 1.txt 打印第10行

#sed '1,4'p -n 1.txt 打印1-4行

#sed '5,$'p -n 1.txt 打印5到末行

#sed '10'p 1.txt 不加 -n 打印所有的行

打印包含某个字符串的行

#sed -n '/root/'p 1.txt

可以使用 ^ . * $ 等特殊符号

#sed -n '/root/'p 1.txt

#sed -n '/^roo/'p 1.txt

#sed -n '/r.*t/'p 1.txt 贪婪匹配

#sed -n '/r?t/'p 1.txt ?需要脱意符号

sed 不识别 + ? 并且符号| {} 组合符号() 等符号,需要借助脱意符号 \ 或者使用选项 -r

#sed -n -r '/ro+/'p 1.txt

#sed -n '/ro+/'p 1.txt

sed -n '/(oo)+/'p 1.txt

sed -n -r '/(oo)/'p 1.txt

sed -r -n '/roo|ftp/'p 1.txt

sed支持grep的所有表达式,取非,开头结尾等,需要用-r。

匹配包含root或者 body 的行

-e 同时进行多个表达式

#sed -e '/root/p' -e '/body/p' -n 1.txt -n在filename前面,或者在sed后面,其他位置不行。

#egrep -n 'root|body' 1.txt

; 同时进行多个表达式

#sed '/root/p ; /body/p' -n 1.txt

一个分号即可,无需全部括起来。分号前面一定要有p,-n位置在前在后没有影响。如果一行里面,有root,又有body,那么会在屏幕上出现两次这个结果。

| 或者表达式

#sed -n -r '/root|body/'p 1.txt

如果是或者的命令,和上面用分号 ; 进行表达的结果比较,即便有一行既包含root,又包含body, 那么该命令也只会显示一次结果,或者的命令只会运行一次。

不显示指定的行,并非删除文本中的行

#sed '/root/'d 1.txt 删除包含root的行

#sed '1'd 1.txt 删除第一行 '1d' 或者 '1'd

#sed '1,10'd 1.txt 删除1到10行

#sed '/[a-zA-Z]/'d 1.txt 删除包含字母的行

#sed '/[0-9]/'d 1.txt 删除包含数字的行

替换功能

#sed '1,2s/ot/to/g' 1.txt 全局替换,全部显示

s 替换的意思

g 全局替换

& 增加替换

命令里面的 / 可以用 # 或者 @ 替换

#sed -n '1,2s/ot/ot/g'p 1.txt 全局替换,只显示符合规则的行 -n 一定和 p一起使用

#sed '1,2s@ot@to@g' 1.txt

#sed '1,10s/nologin/login/g' 1.txt 1-10行的nologin替换成login,全局打印

#sed -n '1,10s/nologin/login/g'p 1.txt 只显示1-10行修改的行

sed -n '1,10s/nologin/login/gp' 1.txt 只显示1-10行修改的行

sed -n '1,$s/nologin/login/g'p 1.txt 修改第一行到最后一行并打印

sed -n '1,10s//sbin/nologin//sbin/login/g'p 1.txt ==

#sed -n '1,10s@/sbin/nologin@/sbin/login@g'p 1.txt 只替换1-10行 /sbin/nologin 里面的nologin为 login,替换后,1-10行的/sbin/nologin替换为 /sbin/login

#sed -n 's@^.*$@login@g'p 1.txt 修改所有的行为 login

#sed -n 's@^.*$@&login@g'p 1.txt 在所有的行后面增加 login

#sed -n 's@^.*$@login&@g'p 1.txt 在所有的行前面增加login

删除所有数字

#sed 's/[0-9]//g' 1.txt

其实就是把所有数字替换为空格

删除所有非数字

#sed 's/[^0-9]//g' 1.txt

删除所有特殊符号

#sed -n 's/[^0-9a-zA-Z]//g'p 1.txt

调换两个字符串位置,调换前两行root和bash的位置

#head -n2 1.txt |sed -r 's/(root)(.*)(bash)/\3\2\1/'

head -n2 1.txt |sed -r 's@(root)(.*)(bash)@\3\2\1@g'

在sed中可以用()表示一个整体,本例中把 root 和 bash的位置调换,后面的\1\2\3 分别表示第一个小括号里面的内容,第二个小括号里面以及第三个小括号里面的内容。

第一段的username和后一段的 shell 调换位置

#sed -r 's/([^:]+)(:.*:)([^:]+)/\3\2\1/' /etc/passwd

前两行的第一个字母和最后一个字母调换位置

head -n2 1.txt |sed -r 's/(^.)(.*)(.$)/\3\2\1/'

-i 直接修改文件内容 【不建议使用】

#sed -i '1,19'd 1.txt 直接删除文本里面的1-19行

#sed -i 's/ot/to/g' 1.txt

其实使用的是 s 的替换功能,但是在修改之前,确保没有错误。最常用

注释5-100行 ,每行的开头增加#号

sed -i 's/^/#/g' 1.txt

sed 's/^/#&/g' 1.txt

转载于:https://my.oschina.net/u/3461300/blog/1577040

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值