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命...