sed:StreamEDitor,流編輯器,以行為機關對一個或多個檔案進行編輯處理;每一次sed都會處理給定檔案中的一行内容。
在sed處理文本時,将正在處理的目前行存儲到臨時的緩沖區中,稱為“模式空間”;用目前行去比對給定的PATTERN,如果能比對,則使用command編輯處理;如果不比對,則預設輸出至标準輸出;然後繼續處理下一行,直到檔案的末尾。
預設情況下,sed的所有處理行為不會影響源檔案的内容;
我們一般會使用sed指令來自動編輯一個或多個檔案,簡化對檔案的循環操作;
sed指令:
sed - stream editor for filtering andtransforming text
sed [OPTION]... 'script' [input-file]...
常用選項:
-n, --quiet, --silent:對于不能比對模式的行,預設不輸出到螢幕;
-e script, --expression=script:多條件編輯;
-f script-file, --file=script-file:從指定的script-file中讀取腳本
注意:script-file為一個能夠定位到腳本檔案的路徑,最好為絕對路徑
-i[SUFFIX], --in-place[=SUFFIX]:原檔案直接編輯操作;
-r, --regexp-extended:使sed支援擴充正規表達式;
script:
'AddressesCommand'
Addresses(位址定界):
1.空位址:對所有檔案的所有行進行處理;
2.單位址:sed對于能夠比對該位址的那唯一一行進行處理;
num:表示行号;
/pattern/:能夠比對該模式的所有行;
$:表示文檔最後一行
3.位址範圍:
addr1,addr2:從addr1開始到addr2結束的中間所有行;
例如:2,8
first~step:從first标記的行号開始,以step所代表的數字為步長;
例如::1~2為奇數行 2~2為偶數行
addr1,+N:從addr1開始,包括addr1所在行,并繼續向後計算N行;
例如:2,+7比對到的行數為23456789一共八行,相當于2,2+7
addr1,~N:從addr1開始,包括addr1所在行,向後計算addr1*N行;
例如:2,~5相當于2,2*5
/pattern1/,/pattern2/:從被pattern1比對的第一行開始計算,一直到被/pattern2/比對到的第一行結束;
Command(處理指令):
=:顯示被模式比對的行的行号
例如:sed -n'/^$/=' /etc/grub2.cfg
a\text:在被模式比對的行的後面追加text的内容,支援使用\n換行,進而實作多行追加;
i \text:在被模式比對的行的前面插入text的内容,支援使用\n換行,進而實作多行插入;
c \text:将被模式比對的行的修改為text的内容,支援使用\n換行,進而實作一行變多行;
d:在模式空間中删除被模式比對的行;這樣的行不能再進行标準輸出;
注意:在使用d指令的時候,不宜使用-n選項;
p:顯示模式空間中被模式比對的行;
注意:在使用p指令的時候,通常會搭配-n選項;
w filepath:将模式空間中被模式比對的行,另存到filepath檔案中;
r filepath:将filepath檔案的内容追加至模式空間中被模式比對的行之後;
!Command:在模式空間中被模式比對的行,不執行Command指令;相反,未被模式比對的行,參會執行Command指令
s///:查找替換,分隔符可以任意更換,隻要相同即可;
s@@@, s###, s,,,
s/pattern/text/[control]
s@/etc/fstab@/etc/mtab@
pattern:計劃查找并替換的内容
text:要替換的結果
control:如何進行替換
g:行内全部替換
p:顯示替換成功的行
w filepath:将替換成功的行另存到filepath檔案中;
支援後向引用:
s/\(string\)/&/
s/\(string\)/\1/
進階編輯指令:
h: 把模式空間中的内容覆寫至保持空間中
H:把模式空間中的内容追加至保持空間中
g: 從保持空間取出資料覆寫至模式空間
G:從保持空間取出内容追加至模式空間
x: 把模式空間中的内容與保持空間中的内容進行互換
n: 讀取比對到的行的下一行覆寫至模式空間
N:追加比對到的行的下一行至模式空間
d: 删除模式空間中的行
D:删除多行模式空間中的所有行
本文轉自 Runs_ 51CTO部落格,原文連結:http://blog.51cto.com/12667170/1930754,如需轉載請自行聯系原作者