sed命令基礎用法

Sed是一種流式編輯器,是針對文檔的行來操作的。它是文本處理中常用的工具,能夠完美的配合正則表達式使用。比起grep/egrep來,功能更加強大。


▌sed命令的基本用法:  sed [-nefri] ‘command’ filename        


▎常用選項:

-n :只有經過sed 特殊處理的那一行纔會被列出來;

-e :可以多點編輯;

-r :sed 的動作支持的脫意;

-i :直接修改讀取的文件內容,而不是輸出到終端。


▎常用命令:

 d :刪除對應行;

 p :打印。通常會與參數 sed -n協同使用;

 s :替換。配合g表示全部替換。




1、查找

1)特殊字符匹配:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@server01 test1]# sed -n '/r.t/'p passwd
operator:x:11:0:operator:/root:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@server01 test1]# sed -n '/ro*t/'p passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@server01 test1]# sed -n '/ro*t/'Ip passwd    ##“I”忽略大小寫
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
Root:x:0:0:Root:/Root:/bin/bash
[root@server01 test1]# sed -nr '/r+at/'p passwd    ##“r”表示脫意
operator:x:11:0:operator:/root:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@server01 test1]# sed -nr '/o{2}/'p passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@server01 test1]# sed -nr '/root|login/'p passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
......
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin


2)打印指定行:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@server01 test1]# sed -n '3'p passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@server01 test1]# sed -n '3,5'p passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@server01 test1]# sed -n '20,$'p passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
[root@server01 test1]# sed -e '20,$'p -e '/lib/'p -n passwd ##單個命令執行多個動作
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin        #同樣的行,第一次#
chrony:x:997:995::/var/lib/chrony:/sbin/nologin        #同樣的行,第二次#


2、刪除

1
2
3
4
5
[root@server01 test1]# sed -i '10,$'d passwd     ##刪除第10行到最後一行
[root@server01 test1]# wc -l passwd
passwd
[root@server01 test1]# sed -i '/root/'d passwd   ##刪除帶root關鍵詞的行
[root@server01 test1]# grep 'root' passwd


3、替換

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@server01 test1]# sed '1,3s/root/ROOT/' passwd
ROOT:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@server01 test1]# sed '1,3s/root/ROOT/g' passwd    ##“g”表示全部匹配項
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
......
[root@server01 test1]# sed 's/\(root\)\(.*\)\(bash\)/\3\2\1/' passwd 
bash:x:0:0:root:/root:/bin/root                             ##調換兩個字符串的位置
bin:x:1:1:bin:/bin:/sbin/nologin
......
[root@server01 test1]# sed -r 's#([^:]+):(.*):([^:]+)#\3\2\1#g' passwd
/bin/bashx:0:0:root:/rootroot
/sbin/nologinx:1:1:bin:/binbin
/sbin/nologinx:2:2:daemon:/sbindaemon
......
[root@server01 test1]# sed 's/[0-9]//g' passwd    ##刪除所有數字
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
......
[root@server01 test1]# sed -r 's/(^root)/#&/g' passwd  ##所有root開頭的行註釋掉
#root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
......

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章