Linux之sed的用法

Linuxsed的用法

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  #顯示第二到最後一行

#Pn要同時出現

查詢某行:

[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文件15行刪除,然後將剩餘內容中的/sbin替換成shedong,然後輸出到熒幕上】




發佈了19 篇原創文章 · 獲贊 17 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章