一、sed命令基本用法
sed只是對緩沖區中原始文件的副本進行編輯,并不是編輯原始的文件。
如果需要保存sed改動的內容,有兩種方式:
(1)將輸出重定向到另一個文件
(2)使用sed編輯命令中的w選項
調用sed有三種方式,命令格式如下:
(1)在shell命令行輸入命令調用sed,格式為:
sed [選項] 'sed命令' 輸入文件
注意:需要用單引號將sed命令引起來
(2)將sed命令插入腳本文件后,然后通過sed命令調用它,格式為:
sed [選項] -f sed腳本文件 輸入文件
(3)將sed命令插入腳本后,最常用的方法是設置該腳本文件為可執行,然后直接執行該腳本文件,格式為:
./sed腳本文件 輸入文件
注意:sed命令通常由定位文本行和sed編輯命令兩部分組成,sed編輯命令對定位文本行進行各種處理。
sed的常用選項:
-n:不打印所有的行到標準輸出
-e:表示將下一個字符串解析為sed編輯命令,如果只傳遞一個編輯命令給sed,-e選項可以省略
-f:表示正在調用sed腳本文件
sed定位文本的方法:
x:x為指定行號
x,y:指定從x到y的行號范圍
/pattern/:查詢包含模式的行
/pattern/pattern/:查詢包含兩個模式的行
/pattern/,x:從與pattern的匹配行到x號行之間的行
x,/pattern/:從x號行到與pattern的匹配行之間的行
x,y!:查詢不包括x和y行號的行
sed編輯命令:
p:打印匹配行
=:打印文件行號
a\:在定位行號之后追加文本信息
i\:在定位行號之前插入文本信息
d:刪除定位行
c\:用新文本替換定位行
s:使用替換模式替換相應模式
r:從另一個文件中讀文本
w:將文本寫入到一個文件
y:變換字符
q:第一個模式匹配完成后退出
l:顯示與八進制ASCII碼等價的控制字符
{}:在定位行執行的命令組
n:讀取下一個輸入行,用下一個命令行處理新的行
h:將模式緩沖區的文本復制到保持緩沖區
H:將模式緩沖區的文本追加到保持緩沖區
x:互換模式緩沖區和保持緩沖區內容
g:將保持緩沖區的內容復制到模式緩沖區
G:將保持緩沖區的內容追加到模式緩沖區
二、sed命令選項
1、sed命令的-n選項
-n選項表示“不打印”功能是指:不打印sed編輯對象的全部內容。
sed匹配關鍵字也是大小寫敏感的
sed -n '3,6p' input
sed -n '/certificate/p' input
2、sed命令的-e選項
-e選項指定其后面緊跟著的字符串為sed編輯命令
sed不支持同時帶多個編輯命令的用法
帶多個編輯命令sed的一般格式為:
sed [選項] -e 編輯命令1 -e 編輯命令2 ... -e 編輯命令n 輸入文件
sed -n -e '/Certificate/p' -e '/Certificate/=' input
3、sed命令的-f選項
-f選項只有調用sed腳本文件時才起作用
三、sed文本定位
1、匹配元字符
sed -n '/\./p' input ? ? ?#匹配.符號
2、使用元字符進行匹配
sed基本編輯命令可以放在單引號內,也可放在單引號外。
sed -n '$'p input ? ? ?#匹配最后一行
3、!符號
!符號表示取反,x,y!表示匹配不在x和y行號范圍內的行。
x!表示匹配除了x行號外的所有行,但是!符號不能用于關鍵字匹配,如無法表示不與/pattern/匹配的行。
sed -n '2,10!p' input
4、使用行號與關鍵字匹配限定行范圍
sed -n '/seugrid/,$p' input ? ? ?#打印與seugrid的匹配行到最后一行
四、sed基本編輯命令
1、追加文本
sed編輯命令a\符號用于追加文本,它可以將指定文本的一行或多行追加到指定行后面。如果不指定文本追加位置,sed默認放置到每一行后面,追加文本的格式:
sed "指定地址a\text" 輸入文件
指定地址以匹配模式/pattern/或行號的形式給出,用于定位新文本的追加位置,sed對a\后的文本進行追加操作。
2、插入文本
插入文本和追加文本類似,區別僅在于追加文本是在匹配行的后面插入,而插入文本是在匹配行的前面插入,sed編輯命令的插入文本符號為i\,插入文本的格式為:
sed '指定地址i\text' 輸入文件
3、修改文本
修改文本是指將所匹配的文本行利用新文本行替代,sed編輯命令的修改文本符號為c\,修改文本的格式為:
sed '指定地址c\text' 輸入文件
4、刪除文本
sed刪除文本命令可以將指定行或指定行的范圍進行刪除,sed編輯命令的刪除文本符號為d,刪除文本的格式為:
指定地址 d
注意:sed編輯命令中的刪除操作符號是d,后面不帶“\”符號,與追加、插入、修改等命令有所區別。
sed '$d' input ? ? ?#刪除最后一行文本
5、替換文本
sed替換文本操作將所匹配的文本行利用新文本替換,替換文本與修改文本功能有相似之處,區別在于修改文本是對整行進行修改,替換文本可以替換一個字符串。sed編輯命令的替換文本符號為s,替換文本的格式為:
s/被替換的字符串/新字符串/[替換選項]
sed替換選項:
g:表示替換文本中所有出現被替換字符串之處
p:與-n選項結合,只打印替換行
w文件名:表示將輸出定向到一個文件
默認情況下,sed s命令將替換后的全部文本都輸出,如果要求只打印替換行,需要結合使用-n和p選項,命令格式如下:
sed -n 's/被替換的字符串/新字符串/p' 輸入文件
sed -n '/Certificate/CERTIFICATE/p' input
sed替換命令在默認情況下,即不帶g選項時,對某行的第1處匹配關鍵字進行替換后,就跳轉到下面匹配行。而g選項使得sed替換命令對某行的所有關鍵字都進行替換。
sed替換文本命令還可指定替換第幾次匹配的關鍵字,只需在替換選項加上相應的數字即可,數字范圍需要在1~512之間。
sed -n 's/seu/njue/2p' input ? ? ?#sed替換第3次匹配
w選項后加文件名表示將輸出定向到這個文件,如果輸出文件未曾建立,sed命令自動建立輸出文件,默認目錄是當前工作目錄。
sed -n 's/seu/njue/w output' input ? ? ?#將seu字符串改為njue,并將結果寫入到ouput文件
&符號可用來保存被替換的字符串以供調用。如果我們需要將seu用圓括號括起來,可用以下兩條等價的命令:
sed -n 's/seu/(&)pg' input
sed -n 's/seu/(seu)/pg' input
6、寫入一個新文件
sed命令指示對緩沖區中輸入文件的復制內容進行編輯,如果要保存編輯結果,需要將編輯后的文本重定向到另一個文件,sed寫入文件的符號為w,基本格式為:
指定地址 w 文件名
w的用法與sed替換文本中w選項相似
sed -n '/globus/w output' input ? ? ?#將匹配globus的行寫入文件
7、從文件中讀入文本
sed命令還可將其他文件中的文本讀入,并附加在指定地址之后,sed讀入文件的符號為r,基本格式為:
指定地址 r 文件名
sed '/Certificate/r otherfile' input
8、退出命令
sed命令的q選項表示完成指定地址的匹配后立即退出,基本格式為:
指定地址 q
sed -n '/.r.*/p' input ? ? ?#查找任意字符后跟r字符,再跟0個或多個任意字符的字符串
9、變換命令
sed命令的y選項表示字符變換,它將一系列的字符變換為相應的字符,sed y命令是對字符的逐個處理,基本格式為:
sed 'y/被變換的字符序列/變換的字符序列/' 輸入文件
sed y命令要求被變換的字符序列和變換的字符序列等長,否則sed y命令將報錯。
sed 'y/fmj/FMJ/' input ? ? ?#將fmj三個字符變換為大寫
10、顯示控制字符
控制字符就是非打印字符,sed l命令可以顯示文件中的控制字符,方便用戶對控制字符進行處理。
sed -n '1,$l' control
11、在定位行執行命令組
sed編輯命令中的“{}”符號可以指定在定位行上所執行的命令組,它的作用與sed的-e選項類似,都是為了在定位行執行多個編輯命令。
sed -n '/Certificate/{p;=}' input