1. 程式人生 > >7.4 9.4-9.5

7.4 9.4-9.5

ooo amp 在屏幕上 manage ftp tro gin 交換 多次

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 匹配在19中間有1-n0的情況

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 匹配rootlpd

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 打印第25

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後跟1no的字符串替換為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表示


7.4 9.4-9.5