??sed是stream editor(流編輯器)的縮寫,是linux中文本處理非常重要的工具。它一次處理一行內(nèi)容,處理時,把當前處理的行存儲在臨時緩沖區(qū)中,稱為“模式空間”(pattern space),接著用sed命令處理模式空間中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容輸出,接著處理下一行,這樣不斷重復(fù),直到文件末尾。文件內(nèi)容并沒有改變,因為這些都在模式空間處理的。sed可以用來自動編輯一個或多個
命令格式
sed [options] [command] file(s)
[option] 選項
-n: 僅顯示處理后的結(jié)果;
-i: 直接修改讀取的文件內(nèi)容,而不是輸出到終端;
-e <script>: 以選項中的指定的script來處理輸入的文本文件;
-f <script file>: 以選項中指定的script文件來處理輸入的文本文件;
[command] 命令
a: 新增,在當前行下面插入文本;
c: 取代, 把選定的行改為新的文本;
d: 刪除,刪除選擇的行;
i: 插入, 在當前行上面插入文本;
p: 打印,打印選擇行數(shù)據(jù),通常與sed -n一起使用;
s: 替換,替換指定字符串,通常與正則表達式一起使用;
用法實例
替換操作
將file文件中每一行第一個的oldStr替換成newStr
sed 's/oldStr/newStr/' file
使用后綴g標記會替換每一行中的所有匹配
sed 's/oldStr/newStr/g' file
-n選項和p命令一起使用表示只打印那些發(fā)生替換的行
sed -n 's/oldStr/newStr/p'
當需要從第N處匹配開始替換時,可以使用 /Ng
echo testtesttesttest | sed 's/test/TEST/2'
testTESTtesttest
定界符
其中 / 在sed中作為定界符使用,也可以使用任意的定界符:
sed 's|oldStr|newStr|' file
sed 's:oldStr:newStr:' file
定界符出現(xiàn)在樣式內(nèi)部時,需要進行轉(zhuǎn)義:
echo /bin | sed 's//bin//usr/local/bin/g'
/usr/local/bin
刪除操作
刪除空白行:
sed '/^$/d' file
刪除文件的第2行:
sed '2d' file
刪除文件的第2行到第5行:
sed '2,5d' file
刪除文件中所有開頭是test的行:
sed '/^test/'d file
多點編輯
-e選項允許在同一行里執(zhí)行多條命令。先刪除1至5行,再用test替換TEST:
sed -e '1,5d' -e 's/test/TEST/' file
從文件讀入
file里的內(nèi)容被讀進來,顯示在與test匹配的行后面,如果匹配多行,則file的內(nèi)容將顯示在所有匹配行的下面:
sed '/test/r file' filename
寫入文件
在example中所有包含test的行都被寫入file里
sed -n '/test/w file' example截屏2020-08-02 下午4.12.29.png
