1. 程式人生 > >Sed 的基礎用法

Sed 的基礎用法

sed

Sed 的基礎用法

sed [ -nefr] [n1,n2] action

-n: 是安靜模式,只有經過sed處理的行才會顯示,其他不現實

-e:表示直接在命令行上執行。是默認選項不用填寫。

-f: 將Sed的操作寫在一個文件裏面,用的時候-f filename 就可以按照內容進行Sed操作

-r :表示支持正則表達式

n1,n2 代表的是行數

Sed的action (動作)支持如下參數

a: 表示添加,後接字符串,添加到當前行的下一行

c:表示替換,後接的字符串,用它來替換N1到N2之間的行

d:刪除行

i:表示插入,後街字符串,添加到當然行的上一行

p:表示打印和-n一起使用

s: 表示搜索,還可以替換1,20s/old/new/g表示把1到20行的old換成new


  • 以行為單位的新增/刪除功能

1.刪除passwd 2-6行

[[email protected] ~]# nl passwd | sed ‘2,6d‘

1 root:x:0:0:root:/root:/bin/bash

7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

8 halt:x:7:0:halt:/sbin:/sbin/halt

9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

11 operator:x:11:0:operator:/root:/sbin/nologin

12 games:x:12:100:games:/usr/games:/sbin/nologin

13 gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

14 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

15 nobody:x:99:99:Nobody:/:/sbin/nologin

16 dbus:x:81:81:System message bus:/:/sbin/nologin

17 vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

18 saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin

2. 刪除第 3 到最後一行

[[email protected] ~]# nl passwd | sed ‘3,$d‘

1 root:x:0:0:root:/root:/bin/bash

2 bin:x:1:1:bin:/bin:/sbin/nologin

3.在第二行後(亦即是加在第三行)加上『drink tea?』字樣

[[email protected] ~]# nl /etc/passwd|sed ‘2a dirnk tea‘

1 root:x:0:0:root:/root:/bin/bash

2 bin:x:1:1:bin:/bin:/sbin/nologin

dirnk tea

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

4 adm:x:3:4:adm:/var/adm:/sbin/nologin

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6 sync:x:5:0:sync:/sbin:/bin/sync

4.在第二行前加上『drink tea?』字樣

[[email protected] ~]# nl /etc/passwd|sed ‘1a dirnk tea‘

1 root:x:0:0:root:/root:/bin/bash

dirnk tea

2 bin:x:1:1:bin:/bin:/sbin/nologin

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

4 adm:x:3:4:adm:/var/adm:/sbin/nologin

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6 sync:x:5:0:sync:/sbin:/bin/sync

[[email protected] ~]# nl /etc/passwd|sed ‘2i dirnk tea‘

1 root:x:0:0:root:/root:/bin/bash

dirnk tea

2 bin:x:1:1:bin:/bin:/sbin/nologin

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

4 adm:x:3:4:adm:/var/adm:/sbin/nologin

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6 sync:x:5:0:sync:/sbin:/bin/sync

5.第二行後面加入兩行字,例如『Drink tea or .....』與『drink beer?』

[[email protected] ~]# nl /etc/passwd|sed ‘2a drink tea or ......\

> dirnk beer?‘

1 root:x:0:0:root:/root:/bin/bash

2 bin:x:1:1:bin:/bin:/sbin/nologin

drink tea or ......

dirnk beer?

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

4 adm:x:3:4:adm:/var/adm:/sbin/nologin

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6 sync:x:5:0:sync:/sbin:/bin/sync





  • 以行為單位的取代與顯示功能


1.我想將第2-5行的內容取代成為『No 2-5 number』呢?

[[email protected] ~]# nl /etc/passwd|sed ‘2,5c NO 2-5 number‘

1 root:x:0:0:root:/root:/bin/bash

NO 2-5 number

6 sync:x:5:0:sync:/sbin:/bin/sync

7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

8 halt:x:7:0:halt:/sbin:/sbin/halt

9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

11 operator:x:11:0:operator:/root:/sbin/nologin

2.僅列出 /etc/passwd 文件內的第 5-7 行

[[email protected] ~]# nl /etc/passwd|sed -n ‘5,7p‘

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6 sync:x:5:0:sync:/sbin:/bin/sync

7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown



部分數據的搜尋取代的功能


1.打印ip地址

[[email protected] ~]# ifconfig eth0 | grep ‘inet addr‘ | sed ‘s/^.*addr://g‘|sed ‘s/Bcast.*//g‘

192.168.9.109

註解: sed ‘s/^.*addr://g‘ 刪除任何開頭addr:的部分 後面直接替換成空

sed ‘s/Bcast.*//g‘ 刪除Bcast結尾的部分


直接修改文件的內容(危險動作)

1.利用sed 把passwd 文件內每一行結尾若為nologin 則換成!

[[email protected] ~]# sed -i ‘s/nologin$/\!/g‘ passwd

[[email protected] ~]# nl passwd

1 root:x:0:0:root:/root:/bin/bash

2 bin:x:1:1:bin:/bin:/sbin/!

3 daemon:x:2:2:daemon:/sbin:/sbin/!

4 adm:x:3:4:adm:/var/adm:/sbin/!

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/!

6 sync:x:5:0:sync:/sbin:/bin/sync

7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

8 halt:x:7:0:halt:/sbin:/sbin/halt

9 mail:x:8:12:mail:/var/spool/mail:/sbin/!

10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/!



常用實例

1.刪除passwd行首的空格


[[email protected] ~]# nl passwd

1 root:x:0:0:root:/root:/bin/bash

2 bin:x:1:1:bin:/bin:/sbin/!

3 daemon:x:2:2:daemon:/sbin:/sbin/!

4 adm:x:3:4:adm:/var/adm:/sbin/!

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/!

[[email protected] ~]# sed ‘s/^ * //g‘ passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/!

daemon:x:2:2:daemon:/sbin:/sbin/!

adm:x:3:4:adm:/var/adm:/sbin/!

lp:x:4:7:lp:/var/spool/lpd:/sbin/!

[[email protected] ~]# sed ‘s/^[ ]* //g‘ passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/!

daemon:x:2:2:daemon:/sbin:/sbin/!

adm:x:3:4:adm:/var/adm:/sbin/!

lp:x:4:7:lp:/var/spool/lpd:/sbin/!

[[email protected] ~]# sed ‘s/^[[:space:]]* //g‘ passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/!

daemon:x:2:2:daemon:/sbin:/sbin/!

adm:x:3:4:adm:/var/adm:/sbin/!

lp:x:4:7:lp:/var/spool/lpd:/sbin/!


本文出自 “天真無邪” 博客,請務必保留此出處http://innocence.blog.51cto.com/4313888/1963234

Sed 的基礎用法