Linux之sed的用法
Sed命令簡介:sed是一個很好的文本處理工具,本身是一個管道命令,主要是以行爲單位進行處理,可以將數據進行替換、刪除、增添、選取等工作。
注意:sed命令只是讀取在命令行指定的文件,將其用作輸入,它不試圖修改文件。
Sed命令行格式:
sed -參數 ‘command’ 文本
常用參數:
-n:使用安靜模式。在一般的sed的用法中,所有來自STDIN【標準輸入】的資料都會被列出到屏幕上。但是如果加上-n參數後,只有經過sed處理過的那一行纔會被列出來。
-i∶直接修改讀取的檔案內容,而不是由螢幕輸出
-e 允許多重編輯
常用command:
= :顯示文件行號
a:新增,a後面接字符串,這些字符串會在目前行的下一行出現
d:刪除,因爲是刪除,所以d後面通常不接任何字符串
i:插入,i後面接字符串,這些字符串會在目前行的上一行出現
p:列印,即將某個選擇的資料列出。通常p會與參數n一起使用
c:取代,c後面可以接字符串,這些字符串可以取代你指定的行
s:取代,這個取代是將文本里的關鍵字進行取代,通常這個s的動作可以搭配正則表示法。
替換的命令格式爲:‘s///g’,g表示sed執行全局替換,如果末尾沒有g,則sed的替換操作只對文本中第一次出現的字符串有效。/也可以替換成其它的字符,比如‘s///g’=‘s:::g’
Sed中使用的規則表達式字符
^ : 與行首進行匹配
$ :與行尾進行匹配
. :與任意一個字符進行匹配
* :與任意一個字符的零個或者多個出現匹配
[] :與[]內的任何一個字符進行匹配
Sed中的規則表達式實例
/./ :將與包含至少一個字符的任何行進行匹配
/../ : 將與包含至少一個字符的任何行進行匹配
/^#/ :將與以‘#’開頭的任意行匹配,通常這是註釋
/^$/ : 將與所有空行進行匹配
/}$/ : 將與‘}’結束的任意行匹配
/} *^/ :注意在}後面有一個空格,這將與‘}’後面跟隨零個或多個空格結束的任意行就行匹配
/[abc]/ :將與包含小寫字母‘a’‘b’‘c’的任意行匹配
/^[abc]/ :將與‘a’‘b’或‘c’開始的任何行匹配
實例演示:
刪除某行:
[root@desktop Desktop]# sed '1d' dong #刪除第一行
[root@desktop Desktop]# sed '$d' dong #刪除最後一行
[root@desktop Desktop]# sed '1,2d' dong #刪除一到二行
[root@desktop Desktop]# sed '2,$d' dong #刪除二到最後一行
顯示某行:
[root@desktop Desktop]# sed -n '1p' dong #顯示第一行
[root@desktop Desktop]# sed -n '$p' dong #顯示最後一行
[root@desktop Desktop]# sed -n '1,2p' dong #顯示第一到第二行
[root@desktop Desktop]# sed -n '2,$p' dong #顯示第二到最後一行
#P與n要同時出現
查詢某行:
[root@desktop Desktop]# sed -n '/root/p' dong #查詢含有關鍵字root的行
[root@desktop Desktop]# sed -n '/\$/p' dong #查詢含有關鍵字$所在的行,使用反斜線\屏蔽特殊含義
增加一行或者多行字符串:
[root@desktop Desktop]# cat dong
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2i$: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@desktop Desktop]# sed '1a wahaha' dong #在第一行增加字符串wahaha
【a:新增,a後面接字符串,這些字符串會在目前行的下一行出現】
root:x:0:0:root:/root:/bin/bash
wahaha
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2i$: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@desktop Desktop]# sed '1,3a shell' dong #第一行到第三行後增加字符串“shell”
root:x:0:0:root:/root:/bin/bash
shell
bin:x:1:1:bin:/bin:/sbin/nologin
shell
daemon:x:2i$:2:daemon:/sbin:/sbin/nologin
shell
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp$:/var/spool/lpd:/sbin/nologin
[root@desktop Desktop]# sed '1a drink tea\nor coffee' dong
#第一行後增加多行,使用換行符\n
root:x:0:0:root:/root:/bin/bash
drink tea
or coffee
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2i$:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp$:/var/spool/lpd:/sbin/nologin
代替一行或者多行:
【c:取代,c後面可以接字符串,這些字符串可以取代你指定的行】
[root@desktop Desktop]# sed '1c shedong' dong #將第一行替代爲shedong
註釋:這個時候
shedong
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2i$: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@desktop Desktop]# sed '1,2c shedong' dong #將一到二行代替爲shedong
註釋:這個時候前兩行變成了一行
shedong
daemon:x:2i$: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@desktop Desktop]# sed 's/root/xiangjiao/g' dong #將關鍵字root替換成xiangjiao
xiangjiao:x:0:0:xiangjiao:/xiangjiao:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2i$: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@desktop Desktop]# sed 's/root//g' dong #刪除關鍵字root
:x:0:0::/:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2i$: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@desktop Desktop]# sed -i '$a byebye' dong #在文件dong最後增加一行byebye
[root@desktop Desktop]# cat dong
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
Byebye
【注意:這個時候已經將文件內容修改了,之前沒有使用-i參數的時候只是將文件作爲標準輸入並沒有修改原文件本身】
= 的演示:
也可以這樣表示:
[root@redhat1 ~]# sed -n '=;p' testone
使用分號隔開多個sed命令
注意:當我們有多條命令的時候,-e命令也不夠使用。這個時候,可以將命令寫入文本文件中,然後通過-f參數引用命令,文本文件以.sed結尾
示例如下:
【這個sed文本文件內容的意思是將dong文件1~5行刪除,然後將剩餘內容中的/sbin替換成shedong,然後輸出到熒幕上】