标签:test 多次 交换 ystemd 表示 family dbus 包含 daemon
9.4 sed(上)
sed常用于替换指定的字符
匹配包含root的行
[root@hyc-01-01 sed]# sed '/root/'p test.txt
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLOGIN 此时匹配成功的行会打印两次,匹配不成功则仅打印一次
dfjfjpwejr.odro.d
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooooooooot
adm:x:3:4:adm:/var/adm:/soooobin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
bot
boot
booot
boooot
-n 在上面命令的基础上在sed后加-n参数,则匹配成功的行不会重复显示,匹配不成功的不会显示
[root@hyc-01-01 sed]# sed -n '/root/'p test.txt
root:x:0:0:root:/root:/bin/bash
onologinperator:x:11:0:operator:/root:/sbin/nologin
[root@hyc-01-01 sed]# sed -n '/10\+9/'p x.txt 匹配在1和9中间有1-n个0的情况
109
1009
10009
10109
1010109
193413410109
[root@hyc-01-01 sed]# sed -nr '/10+9/'p x.txt –r参数可以使+等特殊符号不需要专门脱义字符脱义
109
1009
10009
10109
1010109
193413410109
匹配1次或多次+左侧的字符
[root@hyc-01-01 sed]# sed -nr '/o{2}/'p test.txt 匹配oo
root:x:0:0:root:/root:/bin/bash
rooooooooooot
adm:x:3:4:adm:/var/adm:/soooobin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
boot
booot
boooot
sync:x:5:0:sync:/sbin:/bin/syncoooo
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
onologinperator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@hyc-01-01 sed]# sed -nr '/root|lpd/'p test.txt 匹配root或lpd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
onologinperator:x:11:0:operator:/root:/sbin/nologin
打印指定的行
[root@hyc-01-01 sed]# sed -n '2'p test.txt 打印第2行
bin:x:1:1:bin:/bin:/sbin/NOLOGIN
[root@hyc-01-01 sed]# sed -n '2,5'p test.txt 打印第2到5行
bin:x:1:1:bin:/bin:/sbin/NOLOGIN
dfjfjpwejr.odro.d
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooooooooot
[root@hyc-01-01 sed]# sed -n '2,$'p test.txt 打印第2行到最后一行
bin:x:1:1:bin:/bin:/sbin/NOLOGIN
dfjfjpwejr.odro.d
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooooooooot
adm:x:3:4:adm:/var/adm:/soooobin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
…
[root@hyc-01-01 sed]# sed -n '1,$'p test.txt 打印全部内容
-e 支持在一个sed命令中执行多个操作
[root@hyc-01-01 sed]# sed -e '1'p -e '/bus/'p -n test.txt
root:x:0:0:root:/root:/bin/bash
dbus:x:81:81:System message bus:/:/sbin/nologin
[root@hyc-01-01 sed]# sed -e '/lp/'p -e '/lpd/'p -n test.txt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 执行多个操作时,匹配一次打印一次
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
9.5 sed(下)
[root@hyc-01-01 sed]# sed -n '/test/Ip' test.txt 加大写i参数,匹配时不区分大小写
adm:otestx:3:4:adm:/var/adm:/soooobin/nologin
TEST
不显示文件中指定的行,并打印剩余的行
[root@hyc-01-01 sed]# wc -l test.txt
26 test.txt
[root@hyc-01-01 sed]# sed '1,10'd test.txt 不显示1-10行,打印剩下的行
booot
boooot
sync:x:5:0:sync:/sbin:/bin/syncoooo
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
onologinperator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
[root@hyc-01-01 sed]# wc -l test.txt
26 test.txt
此时不会直接删除指定的行,但这些行不会出现在屏幕上,剩下的行会被打印到屏幕上
-i 在文件中彻底删除指定的行
[root@hyc-01-01 sed]# wc -l test.txt
26 test.txt
[root@hyc-01-01 sed]# sed -i '1,10'd test.txt
[root@hyc-01-01 sed]# wc -l test.txt
16 test.txt
删除与lpd有关的行
[root@hyc-01-01 sed]# sed -i '/lpd/'d test.txt
[root@hyc-01-01 sed]# sed -n '/lpd/'p test.txt
替换
将
[root@hyc-01-01 sed]# sed '1,10s/root/toor/g' test.txt
booot
boooot
sync:x:5:0:sync:/sbin:/bin/syncoooo
shutdown:x:6:0:shutdown:/sbitoorn:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mailtoor:/sbin/nologin
onologinperator:x:11:0:operator:/toor:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobotoordy:x:99:99:Nobody:/:/sbin/nologin
rootsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 第11行开始root不再被替换
rootdbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
将r后跟1到n个o的字符串替换为r
[root@hyc-01-01 sed]# sed -r '1,10s/ro+/r/g' test.txt
booot
boooot
sync:x:5:0:sync:/sbin:/bin/syncoooo
shutdown:x:6:0:shutdown:/sbirtn:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mailrt:/sbin/nologin
onologinperator:x:11:0:operator:/rt:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobortdy:x:99:99:Nobody:/:/sbin/nologin
rootsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
rootdbus:x:81:81:System message bus:/:/sbin/nologin
…
将文件中第一段内容与最后一段内容交换
[root@hyc-01-01 sed]# head test.txt |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/'
booot
boooot
/bin/syncoooo:x:5:0:sync:/sbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbirootn:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
/sbin/nologin:x:8:12:mail:/var/spool/mailroot:mail
/sbin/nologin:x:11:0:operator:/root:onologinperator
/sbin/nologin:x:12:100:games:/usr/games:games
/sbin/nologin:x:14:50:FTP User:/var/ftp:ftp
/sbin/nologin:x:99:99:Nobody:/:noborootdy
前面用小括号括起来的后面要用\+数字表示
使用脱义字符
[root@hyc-01-01 sed]# head test.txt|sed 's//sbin/nologin/123/g' 由于/有特殊含义,无法识别为一般字符,需要脱义
sed:-e 表达式 #1,字符 9:“s”的未知选项
[root@hyc-01-01 sed]# head test.txt|sed 's/\/sbin\/nologin/123/g' or
[root@hyc-01-01 sed]# head test.txt|sed 's@/sbin/nologin@123@g'
或者为了消除歧义,将命令的/替换为@
…
mail:x:8:12:mail:/var/spool/mailroot:123
onologinperator:x:11:0:operator:/root:123
games:x:12:100:games:/usr/games:123
ftp:x:14:50:FTP User:/var/ftp:123
noborootdy:x:99:99:Nobody:/:123
将文件中英文字母替换为空(删除字母)
[root@hyc-01-01 sed]# head test.txt|sed 's/[a-zA-Z]//g'
::5:0::/://
::6:0::/://
::7:0::/://
::8:12::///://
::11:0::/://
::12:100:://://
::14:50: ://://
::99:99::/://
在所有行开头加固定字符串
[root@hyc-01-01 sed]# head test.txt|sed -r 's/(.*)/aaa:&/g' or
[root@hyc-01-01 sed]# head test.txt|sed -r 's/(.*)/aaa:\1/g'
aaa:booot
aaa:boooot
aaa:sync:x:5:0:sync:/sbin:/bin/syncoooo
aaa:shutdown:x:6:0:shutdown:/sbirootn:/sbin/shutdown
aaa:halt:x:7:0:halt:/sbin:/sbin/halt
…
(.*)可以用&代替,或者用\1表示
标签:test 多次 交换 ystemd 表示 family dbus 包含 daemon
原文地址:http://blog.51cto.com/12216458/2136361