Linux sed命令詳解

2022-02-15 21:28:42 字數 4534 閱讀 4686

sed是一種流編輯器,它是文字處理中非常好的工具,能夠完美的配合正規表示式使用,功能不同凡響。處理時,把當前處理的行儲存在臨時緩衝區中,稱為「模式空間」(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有改變,除非你使用重定向儲存輸出。sed主要用來自動編輯乙個或多個檔案,可以將資料行進行替換、刪除、新增、選取等特定工作,簡化對檔案的反覆操作,編寫轉換程式等。

sed的命令格式:sed [options] '

command

'file

(s);

sed的指令碼格式:

sed [options] -f scriptfile file(s);

-f :將sed的動作寫在乙個檔案內,用–f filename 執行filename內的sed動作;

-i :直接修改檔案內容;

-n :只列印模式匹配的行;

-r :支援擴充套件表示式;

-h或--help:顯示幫助;

-v或--version:顯示版本資訊。

引數命令

說明

a\在當前行下面插入文字;

i\在當前行上面插入文字;

c\把選定的行改為新的文字;

d刪除,刪除選擇的行;

d刪除模板塊的第一行;

s替換指定字元;

h拷貝模板塊的內容到記憶體中的緩衝區;

h追加模板塊的內容到記憶體中的緩衝區;

g獲得記憶體緩衝區的內容,並替代當前模板塊中的文字;

g獲得記憶體緩衝區的內容,並追加到當前模板塊文字的後面;

l列表不能列印字元的清單;

n讀取下乙個輸入行,用下乙個命令處理新的行而不是用第乙個命令;

n追加下乙個輸入行到模板塊後面並在二者間嵌入乙個新行,改變當前行號碼;

p列印模板塊的行。 p(大寫) 列印模板塊的第一行;

q退出sed;

blable 分支到指令碼中帶有標記的地方,如果分支不存在則分支到指令碼的末尾;

rfile 從file中讀行;

tlabel if分支,從最後一行開始,條件一旦滿足或者t,t命令,將導致分支到帶有標號的命令處,或者到指令碼的末尾;

tlabel 錯誤分支,從最後一行開始,一旦發生錯誤或者t,t命令,將導致分支到帶有標號的命令處,或者到指令碼的末尾;

w file 寫並追加模板塊到file末尾;

wfile 寫並追加模板塊的第一行到file末尾;

!表示後面的命令對所有沒有被選定的行發生作用;

=列印當前行號;

#把注釋擴充套件到下乙個換行符以前;

命令

說明

g表示行內全面替換;

p表示列印行;

w表示把行寫入乙個檔案;

x表示互換模板塊中的文字和緩衝區中的文字;

y表示把乙個字元翻譯為另外的字元(但是不用於正規表示式);

\1子串匹配標記;

&已匹配字串標記;

字符集

說明

^匹配行開始,如:/^sed/匹配所有以sed開頭的行;

$匹配行結束,如:/sed$/匹配所有以sed結尾的行;

.匹配乙個非換行符的任意字元,如:/s.d/匹配s後接乙個任意字元,最後是d;

*匹配0個或多個字元,如:/*sed/匹配所有模板是乙個或多個空格後緊跟sed的行;

匹配乙個指定範圍內的字元,如/[ss]ed/匹配sed和sed;

[^]匹配乙個不在指定範圍內的字元,如:/[^a-rt-z]ed/匹配不包含a-r和t-z的乙個字母開頭,緊跟ed的行;

\(..\)

匹配子串,儲存匹配的字元,如s/\(love\)able/\1rs,loveable被替換成lovers;

&儲存搜尋字元用來替換其他字元,如s/love/**&**/,love這成**love**;

\<

匹配單詞的開始,如:/\

\>

匹配單詞的結束,如/love\>/匹配包含以love結尾的單詞的行;

x\重複字元x,m次,如:/0\/匹配包含5個0的行;

x\重複字元x,至少m次,如:/0\/匹配至少有5個0的行;

x\重複字元x,至少m次,不多於n次,如:/0\/匹配5~10個0的行;

grep -a 1 is test.txt   //

grep方法

sed -n '

/i/' test.txt //

sed方法

awk'

/is/

' test.txt //

awk方法

綜合練習

copy乙份/etc/passwd檔案練習

[root@centos7-1 ~]# cp /etc/passwd ./[root@centos7-1 ~]# sed -n '

s/^root/#&/p

'passwd

//注釋掉以root開頭的行

[root@centos7-1 ~]# sed -n -r '

s/^root|^ntp/#&/p

'passwd

//注釋掉以root開頭或者以ntp開頭的行

[root@centos7-1 ~]# sed -n '

1,5s/^[a-z].*/#&/p

'passwd

//注釋掉1~5行中以任意小寫字母開頭的行

[root@centos7-1 ~]# sed -n '

1,5s/^/#/p

'passwd

//注釋1~5行

[root@centos7-1 ~]# sed -n '

s/^/#/p

'passwd

//快速注釋乙個檔案

[root@centos7-1 ~]# sed -n '

s/^#//p

'passwd

//快速取消注釋

[root@centos7-1 ~]# sed -n '

1,5s/[0-9:/]//gp

'passwd

//去掉檔案1-5行中的數字、冒號、斜槓

或者:[root@centos7-1 ~]# sed -n '

1,5s/[^a-z]//gp

'passwd

[root@centos7-1 ~]# sed -n '

s/[0-9]/#/pg

'passwd

//列印匹配將任意數字替換#

[root@centos7-1 ~]# sed -n '

s/[0-9]/\t/pg

'passwd

//列印匹配將任意數字替換成製表符

# 刪除vsftpd.conf配置檔案裡面所有注釋的行及空行

[root@centos7-1 ~]# sed -e '

/^#/d

' -e '

/^$/d

' /etc/vsftpd/vsftpd.conf

或者:[root@centos7-1 ~]# sed -r '

/^#|^$/d

' /etc/vsftpd/vsftpd.conf

或者:[root@centos7-1 ~]# sed

'/^#/d;/^$/d

' /etc/vsftpd/vsftpd.conf

# 使用sed命令擷取ip位址

centos7系統

[root@centos7-1 ~]# ifconfig eth0 |sed -n '

s#.*inet \(.*\)netmask.*#\1#p'//

方法一[root@centos7-1 ~]# ifconfig eth0 |sed -n '

2p' |sed -n '

s/.*inet \(.*\)netmask.*/\1/p'//

方法二centos6系統

[root@centos6-1 ~]# ifconfig em1 |sed -n '

s#.*addr:\(.*\)bcast.*#\1#p'//

方法一[root@centos6-1 ~]# ifconfig em1 |sed -n '

2p' |sed -n '

s/.*addr:\(.*\)bcast.*/\1/p'//

方法二# 使用sed命令一次性擷取ip位址、廣播位址、子網掩碼

[root@centos7-1 ~]# ifconfig eth0 |sed -n '

s#.*inet \(.*\)netmask \(.*\)broadcast \(.*\)#\1\n\2\n\3#p

'[root@centos7-1 ~]# ifconfig eth0 |sed -n '

'[root@centos6-1 ~]# ifconfig em1 |sed -n '

s#.*addr:\(.*\)bcast:\(.*\)mask:\(.*\)#\1\n\2\n\3#p

'

linux sed命令詳解

1.sed簡介 3.sed命令 呼叫sed命令有兩種形式 sed options command file s sed options f scriptfile file s a 在當前行後面加入一行文字。b lable 分支到指令碼中帶有標記的地方,如果分支不存在則分支到指令碼的末尾。c 用新的文...

linux sed命令詳解

3.sed命令 呼叫sed命令有兩種形式 sed options command file s sed options f scriptfile file s a 在當前行後面加入一行文字。b lable 分支到指令碼中帶有標記的地方,如果分支不存在則分支到指令碼的末尾。c 用新的文字改變本行的文字...

linux sed命令詳解

1.sed簡介 1.sed簡介 2.定址 可以通過定址來定位你所希望編輯的行,該位址用數字構成,用逗號分隔的兩個行數表示以這兩行為起止的行的範圍 包括行數表示的那兩行 如1,3表示 1,2,3行,美元符號 表示最後一行。範圍可以通過資料,正規表示式或者二者結合的方式確定 3.sed命令 呼叫sed命...