調(diào)用sed有三種方式:
- 在命令行鍵入命令;
- 將sed命令插入腳本文件蜘腌,然后調(diào)用sed;
- 將sed命令插入腳本文件饵隙,并使sed腳本可執(zhí)行撮珠。
1.使用sed命令行格式為:
sed [options] sed命令 輸入文件
記住在命令行使用sed命令時(shí),實(shí)際命令要加單引號(hào)金矛。sed也允許加雙引號(hào)芯急。
2.使用sed腳本文件勺届,格式為:
sed [options] -f sed腳本文件 輸入文件
3.要使用第一行具有sed命令解釋器的sed腳本文件,其格式為:
sed腳本文件 [options] 輸入文件
不管是使用shell命令行方式或腳本文件方式志于,如果沒有指定輸入文件涮因, sed從標(biāo)準(zhǔn)輸入中
接受輸入,一般是鍵盤或重定向結(jié)果伺绽。
sed options如下:
- n 不打友荨;sed不寫編輯行到標(biāo)準(zhǔn)輸出奈应,缺省為打印所有行(編輯和未編輯)澜掩。p命令可以用來打印編輯行。
- e∶進(jìn)行多項(xiàng)編輯杖挣,即對(duì)輸入行應(yīng)用多條sed命令時(shí)使用. 直接在指令列模式上進(jìn)行 sed 的動(dòng)作編輯
- c 下一命令是編輯命令肩榕。使用多項(xiàng)編輯時(shí)加入此選項(xiàng)。如果只用到一條sed命令惩妇,此選項(xiàng)無用株汉,但指定它也沒有關(guān)系。
- f 如果正在調(diào)用sed腳本文件歌殃,使用此選項(xiàng)乔妈。
- i∶直接修改讀取的文件內(nèi)容,而不是由屏幕輸出
1.使用sed在文件中查詢文本的方式
sed瀏覽輸入文件時(shí)氓皱,缺省從第一行開始路召,有兩種方式定位文本:
1)使用行號(hào),可以是一個(gè)簡單數(shù)字波材,或是一個(gè)行號(hào)范圍股淡。
2 ) 使用正則表達(dá)式
使用sed定位文本的一些方式
命令 | 描述 |
---|---|
x | x為一行號(hào),如1 |
x , y | 表示行號(hào)范圍從x到y(tǒng)廷区,如2唯灵,5表示從第2行到第5行 |
/pattern/ | 查詢包含模式的行。例如/disk/或/[a-z]/ |
/pattern/pattern/ | 查詢包含兩個(gè)模式的行躲因。例如/disk/disks/ |
/pattern/,x | 在給定行號(hào)上查詢包含模式的行早敬。如/ ibbon/ , 3 |
x , /pattern/ | 通過行號(hào)和模式查詢匹配行。3,/vdu/ |
x , y ! | 查詢不包含指定行號(hào)x和y的行大脉。1 , 2 ! |
2.基本sed編輯命令
sed編輯命令
命令 | 描述 |
---|---|
p | 打印匹配行 |
= | 顯示文件行號(hào) |
a \ | 在定位行號(hào)后附加新文本信息 |
i \ | 在定位行號(hào)后插入新文本信息 |
d | 刪除定位行 |
c \ | 用新文本替換定位文本 |
s | 使用替換模式替換相應(yīng)模式 |
r | 從另一個(gè)文件中讀文本 |
w | 寫文本到一個(gè)文件 |
q | 第一個(gè)模式匹配完成后推出或立即推出 |
l | 顯示與八進(jìn)制ASCII代碼等價(jià)的控制字符 |
{ } | 在定位行執(zhí)行的命令組 |
n | 從另一個(gè)文件中讀文本下一行搞监,并附加在下一行 |
g | 將模式2粘貼到/pattern n/ |
y | 傳送字符 |
n | 延續(xù)到下一輸入行;允許跨行的模式匹配語句 |
3.sed和正則表達(dá)式
sed正則
命令 | 描述 |
---|---|
^ | 匹配行開始镰矿,如:/^sed/匹配所有以sed開頭的行琐驴。 |
$ | 匹配行結(jié)束,如:/sed$/匹配所有以sed結(jié)尾的行。 |
. | 匹配一個(gè)非換行符的任意字符绝淡,如:/s.d/匹配s后接一個(gè)任意字符宙刘,最后是d。 |
* | 匹配0個(gè)或多個(gè)字符牢酵,如:/*sed/匹配所有模板是一個(gè)或多個(gè)空格后緊跟sed的行悬包。 |
[] | 匹配一個(gè)指定范圍內(nèi)的字符,如/[sS]ed/匹配sed和Sed馍乙。 |
[^] | 匹配一個(gè)不在指定范圍內(nèi)的字符布近,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個(gè)字母開頭,緊跟ed的行丝格。 |
(..) | 匹配子串撑瞧,保存匹配的字符,如s/(love)able/\1rs显蝌,loveable被替換成lovers预伺。 |
& | 保存搜索字符用來替換其他字符,如s/love/&/曼尊,love這成love酬诀。 |
< | 匹配單詞的開始,如:/<love/匹配包含以love開頭的單詞的行骆撇。 |
> | 匹配單詞的結(jié)束料滥,如/love>/匹配包含以love結(jié)尾的單詞的行。 |
x{m} | 重復(fù)字符x艾船,m次,如:/0{5}/匹配包含5個(gè)0的行高每。 |
x{m,} | 重復(fù)字符x屿岂,至少m次,如:/0{5,}/匹配至少有5個(gè)0的行鲸匿。 |
x{m,n} | 重復(fù)字符x爷怀,至少m次,不多于n次带欢,如:/0{5,10}/匹配5~10個(gè)0的行运授。 |
4.基本sed使用舉例(都是要test.txt文件)
1)使用p(rint)顯示行
ptint命令格式為[ address [,address ] P乔煞。顯示文本行必須提供sed命令行號(hào)吁朦。
pengzw@super-server:~$ cat test.txt
Hello,world!
Write a word!
I love dog!
Good good study, day day up!
I have $1.
pengzw@super-server:~$ sed -n '2p' test.txt
Write a word!
2)打印范圍:可以指定行的范圍,現(xiàn)打印1到3行渡贾,用逗號(hào)分隔行號(hào)逗宜。
pengzw@super-server:~$ sed -n '1,2p' test.txt
Hello,world!
Write a word!
3)打印模式:匹配單詞day,并打印此行,使用模式/pattren/
pengzw@super-server:~$ sed -n '/day/'p test.txt
Good good study, day day up!
4)使用模式和行號(hào)進(jìn)行查詢:4 , /the/纺讲,但是有一個(gè)問題擂仍,如果行號(hào)指定不對(duì),會(huì)出現(xiàn)指定行和匹配day的行熬甚。
pengzw@super-server:~$ sed -n '4,/day/'p test.txt
Good good study, day day up!
pengzw@super-server:~$ sed -n '3,/day/'p test.txt
I love dog!
Good good study, day day up!
5)匹配元字符
匹配元字符$前逢渔,必須使用反斜線\屏蔽其特殊含義。模式為/$/ p乡括。
pengzw@super-server:~$ sed -n '/\$/'p test.txt
I have $1.
6)顯示整個(gè)文件:1,$p肃廓,$意為最后一行。
pengzw@super-server:~$ sed -n '1,$p' test.txt
Hello,world!
Write a word!
I love dog!
Good good study, day day up!
I have $1.
7)任意字符:
pengzw@super-server:~$ sed -n '/.*u/'p test.txt
Good good study, day day up!
8)首行:比較兩種寫法粟判,一般都是第二種
pengzw@super-server:~$ sed -n '1'p test.txt
Hello,world!
pengzw@super-server:~$ sed -n '1p' test.txt
Hello,world!
9)末行
pengzw@super-server:~$ sed -n '$p' test.txt
I have $1.
10)打印行號(hào)
要打印行號(hào)亿昏,使用等號(hào)=。打印模式匹配的行號(hào)档礁,使用格式/pattern/ =角钩。
整個(gè)文件都打印出來,并且匹配行打印了行號(hào)呻澜。
pengzw@super-server:~$ sed -e '/.u/=' test.txt
Hello,world!
Write a word!
I love dog!
4
Good good study, day day up!
I have $1.
如果只關(guān)心實(shí)際行號(hào)递礼,使用-n選項(xiàng)。
pengzw@super-server:~$ sed -n '/.u/=' test.txt
4
如果只打印行號(hào)及匹配行羹幸,必須使用兩個(gè)sed命令脊髓,并使用e選項(xiàng)。第一個(gè)命令打印模式
匹配行栅受,第二個(gè)使用=選項(xiàng)打印行號(hào)将硝,格式為sed -n -e /pattern/p -e /pattern/=。
pengzw@super-server:~$ sed -n -e '/u/p' -e '/u/=' test.txt
Good good study, day day up!
4
參考:
linux與unix shell編程指南.pdf
https://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html