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 的基礎用法