一煮落、sed命令基本用法
sed只是對緩沖區(qū)中原始文件的副本進(jìn)行編輯启搂,并不是編輯原始的文件计维。
如果需要保存sed改動的內(nèi)容扫责,有兩種方式:
(1)將輸出重定向到另一個(gè)文件
(2)使用sed編輯命令中的w選項(xiàng)
調(diào)用sed有三種方式须板,命令格式如下:
(1)在shell命令行輸入命令調(diào)用sed碰镜,格式為:
sed [選項(xiàng)] 'sed命令' 輸入文件
注意:需要用單引號將sed命令引起來
(2)將sed命令插入腳本文件后,然后通過sed命令調(diào)用它习瑰,格式為:
sed [選項(xiàng)] -f sed腳本文件 輸入文件
(3)將sed命令插入腳本后绪颖,最常用的方法是設(shè)置該腳本文件為可執(zhí)行,然后直接執(zhí)行該腳本文件甜奄,格式為:
./sed腳本文件 輸入文件
注意:sed命令通常由定位文本行和sed編輯命令兩部分組成柠横,sed編輯命令對定位文本行進(jìn)行各種處理窃款。
sed的常用選項(xiàng):
-n:不打印所有的行到標(biāo)準(zhǔn)輸出
-e:表示將下一個(gè)字符串解析為sed編輯命令,如果只傳遞一個(gè)編輯命令給sed牍氛,-e選項(xiàng)可以省略
-f:表示正在調(diào)用sed腳本文件
sed定位文本的方法:
x:x為指定行號
x,y:指定從x到y(tǒng)的行號范圍
/pattern/:查詢包含模式的行
/pattern/pattern/:查詢包含兩個(gè)模式的行
/pattern/,x:從與pattern的匹配行到x號行之間的行
x,/pattern/:從x號行到與pattern的匹配行之間的行
x,y!:查詢不包括x和y行號的行
sed編輯命令:
p:打印匹配行
=:打印文件行號
a\:在定位行號之后追加文本信息
i\:在定位行號之前插入文本信息
d:刪除定位行
c\:用新文本替換定位行
s:使用替換模式替換相應(yīng)模式
r:從另一個(gè)文件中讀文本
w:將文本寫入到一個(gè)文件
y:變換字符
q:第一個(gè)模式匹配完成后退出
l:顯示與八進(jìn)制ASCII碼等價(jià)的控制字符
{}:在定位行執(zhí)行的命令組
n:讀取下一個(gè)輸入行晨继,用下一個(gè)命令行處理新的行
h:將模式緩沖區(qū)的文本復(fù)制到保持緩沖區(qū)
H:將模式緩沖區(qū)的文本追加到保持緩沖區(qū)
x:互換模式緩沖區(qū)和保持緩沖區(qū)內(nèi)容
g:將保持緩沖區(qū)的內(nèi)容復(fù)制到模式緩沖區(qū)
G:將保持緩沖區(qū)的內(nèi)容追加到模式緩沖區(qū)
二、sed命令選項(xiàng)
1搬俊、sed命令的-n選項(xiàng)
-n選項(xiàng)表示“不打印”功能是指:不打印sed編輯對象的全部內(nèi)容紊扬。
sed匹配關(guān)鍵字也是大小寫敏感的
sed -n '3,6p' input
sed -n '/certificate/p' input
2、sed命令的-e選項(xiàng)
-e選項(xiàng)指定其后面緊跟著的字符串為sed編輯命令
sed不支持同時(shí)帶多個(gè)編輯命令的用法
帶多個(gè)編輯命令sed的一般格式為:
sed [選項(xiàng)] -e 編輯命令1 -e 編輯命令2 ... -e 編輯命令n 輸入文件
sed -n -e '/Certificate/p' -e '/Certificate/=' input
3悠抹、sed命令的-f選項(xiàng)
-f選項(xiàng)只有調(diào)用sed腳本文件時(shí)才起作用
三珠月、sed文本定位
1、匹配元字符
sed -n '/\./p' input ? ? ?#匹配.符號
2楔敌、使用元字符進(jìn)行匹配
sed基本編輯命令可以放在單引號內(nèi)啤挎,也可放在單引號外。
sed -n '$'p input ? ? ?#匹配最后一行
3卵凑、!符號
!符號表示取反庆聘,x,y!表示匹配不在x和y行號范圍內(nèi)的行。
x!表示匹配除了x行號外的所有行勺卢,但是!符號不能用于關(guān)鍵字匹配伙判,如無法表示不與/pattern/匹配的行。
sed -n '2,10!p' input
4黑忱、使用行號與關(guān)鍵字匹配限定行范圍
sed -n '/seugrid/,$p' input ? ? ?#打印與seugrid的匹配行到最后一行
四宴抚、sed基本編輯命令
1、追加文本
sed編輯命令a\符號用于追加文本甫煞,它可以將指定文本的一行或多行追加到指定行后面菇曲。如果不指定文本追加位置霎俩,sed默認(rèn)放置到每一行后面脏榆,追加文本的格式:
sed "指定地址a\text" 輸入文件
指定地址以匹配模式/pattern/或行號的形式給出,用于定位新文本的追加位置揖盘,sed對a\后的文本進(jìn)行追加操作楷力。
2喊式、插入文本
插入文本和追加文本類似,區(qū)別僅在于追加文本是在匹配行的后面插入萧朝,而插入文本是在匹配行的前面插入岔留,sed編輯命令的插入文本符號為i\,插入文本的格式為:
sed '指定地址i\text' 輸入文件
3检柬、修改文本
修改文本是指將所匹配的文本行利用新文本行替代贸诚,sed編輯命令的修改文本符號為c\,修改文本的格式為:
sed '指定地址c\text' 輸入文件
4、刪除文本
sed刪除文本命令可以將指定行或指定行的范圍進(jìn)行刪除酱固,sed編輯命令的刪除文本符號為d械念,刪除文本的格式為:
指定地址 d
注意:sed編輯命令中的刪除操作符號是d,后面不帶“\”符號运悲,與追加龄减、插入、修改等命令有所區(qū)別班眯。
sed '$d' input ? ? ?#刪除最后一行文本
5希停、替換文本
sed替換文本操作將所匹配的文本行利用新文本替換,替換文本與修改文本功能有相似之處署隘,區(qū)別在于修改文本是對整行進(jìn)行修改宠能,替換文本可以替換一個(gè)字符串。sed編輯命令的替換文本符號為s磁餐,替換文本的格式為:
s/被替換的字符串/新字符串/[替換選項(xiàng)]
sed替換選項(xiàng):
g:表示替換文本中所有出現(xiàn)被替換字符串之處
p:與-n選項(xiàng)結(jié)合违崇,只打印替換行
w文件名:表示將輸出定向到一個(gè)文件
默認(rèn)情況下,sed s命令將替換后的全部文本都輸出诊霹,如果要求只打印替換行羞延,需要結(jié)合使用-n和p選項(xiàng),命令格式如下:
sed -n 's/被替換的字符串/新字符串/p' 輸入文件
sed -n '/Certificate/CERTIFICATE/p' input
sed替換命令在默認(rèn)情況下脾还,即不帶g選項(xiàng)時(shí)伴箩,對某行的第1處匹配關(guān)鍵字進(jìn)行替換后,就跳轉(zhuǎn)到下面匹配行鄙漏。而g選項(xiàng)使得sed替換命令對某行的所有關(guān)鍵字都進(jìn)行替換嗤谚。
sed替換文本命令還可指定替換第幾次匹配的關(guān)鍵字,只需在替換選項(xiàng)加上相應(yīng)的數(shù)字即可怔蚌,數(shù)字范圍需要在1~512之間巩步。
sed -n 's/seu/njue/2p' input ? ? ?#sed替換第3次匹配
w選項(xiàng)后加文件名表示將輸出定向到這個(gè)文件,如果輸出文件未曾建立媚创,sed命令自動建立輸出文件,默認(rèn)目錄是當(dāng)前工作目錄彤恶。
sed -n 's/seu/njue/w output' input ? ? ?#將seu字符串改為njue钞钙,并將結(jié)果寫入到ouput文件
&符號可用來保存被替換的字符串以供調(diào)用。如果我們需要將seu用圓括號括起來声离,可用以下兩條等價(jià)的命令:
sed -n 's/seu/(&)pg' input
sed -n 's/seu/(seu)/pg' input
6芒炼、寫入一個(gè)新文件
sed命令指示對緩沖區(qū)中輸入文件的復(fù)制內(nèi)容進(jìn)行編輯,如果要保存編輯結(jié)果术徊,需要將編輯后的文本重定向到另一個(gè)文件本刽,sed寫入文件的符號為w,基本格式為:
指定地址 w 文件名
w的用法與sed替換文本中w選項(xiàng)相似
sed -n '/globus/w output' input ? ? ?#將匹配globus的行寫入文件
7、從文件中讀入文本
sed命令還可將其他文件中的文本讀入子寓,并附加在指定地址之后暗挑,sed讀入文件的符號為r,基本格式為:
指定地址 r 文件名
sed '/Certificate/r otherfile' input
8斜友、退出命令
sed命令的q選項(xiàng)表示完成指定地址的匹配后立即退出炸裆,基本格式為:
指定地址 q
sed -n '/.r.*/p' input ? ? ?#查找任意字符后跟r字符,再跟0個(gè)或多個(gè)任意字符的字符串
9鲜屏、變換命令
sed命令的y選項(xiàng)表示字符變換烹看,它將一系列的字符變換為相應(yīng)的字符,sed y命令是對字符的逐個(gè)處理洛史,基本格式為:
sed 'y/被變換的字符序列/變換的字符序列/' 輸入文件
sed y命令要求被變換的字符序列和變換的字符序列等長惯殊,否則sed y命令將報(bào)錯(cuò)。
sed 'y/fmj/FMJ/' input ? ? ?#將fmj三個(gè)字符變換為大寫
10也殖、顯示控制字符
控制字符就是非打印字符土思,sed l命令可以顯示文件中的控制字符,方便用戶對控制字符進(jìn)行處理毕源。
sed -n '1,$l' control
11浪漠、在定位行執(zhí)行命令組
sed編輯命令中的“{}”符號可以指定在定位行上所執(zhí)行的命令組,它的作用與sed的-e選項(xiàng)類似霎褐,都是為了在定位行執(zhí)行多個(gè)編輯命令址愿。
sed -n '/Certificate/{p;=}' input