sed
命令說明:
sed過濾、添加、編輯修改等等功能。重點
sed本身也是一個管道命令,可以分析standard input的,而且sed還可以將數據進行替換、刪除、新增、選取特定行等的功能
語法:
sed[-nefr] 動作
-n :使用安靜(silent)模式。在一般的sed用法中,所有來自STDIN的數據一般都會被列出到屏幕
上,但如果加上-n參數後,則只有經過sed特殊處理的那一行(後者操作)纔會被列出來
-e :直接子命令行模式上進行sed的動作編輯
-f :直接將sed的動作寫在一個文件內,-f filename則可以執行filename內的sed動作
-r :sed的動作支持的是擴展型正則表達式的語法(默認是基礎正則表達式語法)
-i :直接修改讀取的文件內容,而不是由屏幕輸出
動作說明: [n1[,n2]] function
n1 :不見得會存在,一般代表選擇進行動作的行數
function有下面這些參數:
a :新增,a的後面可以接字符串,而這些字符串會在新的一行出現(目前的下一行)
c :替換,c的後面可以接字符串,這些字符串可以替換n1,n2之間的行
d :刪除,因爲是刪除,所以d後面通常不接任何參數
i :插入,i的後面可以接字符串,而這些字符串會在新的一行出現(目前的上一行)
p :打印,也就是將某個選擇的數據打印出來,通常p會與參數sed-n 一起運行
s :替換,可以直接進行替換的工作,通常這個s的動作可以搭配
·以行爲單位的新增/刪除功能
範例:
nl /etc/passwd | sed ‘2,5d’ 刪除2-5行
nl /etc/passwd | sed ‘2d’ 刪除第2行
nl /etc/passwd | sed ‘2,$d 刪除2到最後一行
·以行爲單位的替換與顯示功能
nl /etc/passwd | sed ‘2,5c NO 2-5 number’
nl /etc/passwd | sed -n ‘5,7p ’ 僅顯示5-7行
sed -n '$p' ab #顯示最後一行
sed -n '/ruby/p' ab #查詢包括關鍵字ruby所在所有行
sed -n ‘/\$/p’ ab #查詢ab中包括關鍵字$所在所有行使用\屏蔽特殊含義
sed '1a drink tea\nor coffee' ab #第一行後增加多行,使用換行符\n
·部分數據的查找並替換的功能
sed ‘s/要被更換的字符串/新的字符串/g’
·直接修改文件內容(危險操作)
sed -i ‘s/\$/\!/g’ regular.txt
sed -i ‘$a #This is a test’ regular.txt
命令實踐:
[root@yubinghost~]# nl /etc/passwd | sed '2,5d' 刪除2-5行
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
..............
[root@yubinghost~]# nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer?'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or......
drink 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
我們可以新增不只一行,可以新增好幾行,但是每一行之間都必須要以反斜槓 \ 來進行新行的增加
[root@yubinghost~]# nl /etc/passwd | sed '2,5c No 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
No 2-5 number 將2-5替換成No2-5 number了
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@yubinghost~]# nl /etc/passwd | sed -n '2,5p' 僅顯示2-5行
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
[root@yubinghost~]#
[root@yubing ~]# nl /etc/passwd | sed '5,$d' 刪除5到最後一行
1 root:x:0:0:root:/root:/bin/bash
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
[root@yubing ~]#
[root@yubing ~]# nl /etc/passwd|sed '2,5c NO2-5 number' 將2-5行替換成
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
.......................................
[root@yubing ~]# nl /etc/passwd | sed -n'5,7p' 僅顯示5-7行
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
[root@yubing ~]# nl /etc/passwd | sed'5,7p' 不加-n參數會顯示所有行數
1 root:x:0:0:root:/root:/bin/bash
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
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
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 news:x:9:13:news:/etc/news: