Sed#

Linux 的 sed 套件主要由 GNU 專案維護,屬於 GNU sed 工具集的一部分。

sed 代表 Stream Editor(串流編輯器)。它不會直接開啟檔案(像 vim 或 nano),而是逐行讀取內容,根據你下的指令修改後,將結果輸出到螢幕上(標準輸出)。

Install#

sudo apt-get install sed

Operate#

語法#

sed [OPTION]... {script-only-if-no-other-script} [input-file]...
parameterdescription
OPTIONsed 的選項參數
script-only-if-no-other-scriptsed 指令腳本(如果沒有其他腳本)
input-file要處理的輸入檔案

Common Options#

parameterdescription
-e script指定要執行的 sed 指令腳本
-f script-file從指定的檔案中讀取 sed 指令腳本
-i[SUFFIX]直接修改原始檔案,並可選擇備份
-n不自動輸出處理結果
–version顯示 sed 的版本資訊
–help顯示幫助資訊

operations#

operationdescriptionexample
s/…/…/取代字串sed 's/old/new/g' file.txt
g全域取代sed 's/old/new/g' file.txt
d刪除行sed '3d' file.txt
i\text在指定行前插入文字sed '3i\New line' file.txt
a\text在指定行後插入文字sed '3a\New line' file.txt

Examples#

特換文件中第一個字串#

sed 's/old_string/new_string/' filename.txt

替換文件中所有字串#

sed 's/old_string/new_string/g' filename.txt

不需分大小寫替換#

sed 's/old_string/new_string/Ig' filename.txt

刪除指定行號#

sed '3d' filename.txt

刪除第2到第5行#

sed '2,5d' filename.txt

刪除包含特定字串的行#

sed '/pattern/d' filename.txt

刪除以#開頭的行#

sed '/^#/d' filename.txt

刪除空白行#

sed '/^$/d' filename.txt

在指定行前插入文串#

sed '3i\This is a new line.' filename.txt

在指定行後插入字串#

sed '3a\This is a new line.' filename.txt

在匹配到的行前面加入字串#

sed '/pattern/i\This is a new line.' filename.txt

在匹配到的行後面加入字串#

sed '/pattern/a\This is a new line.' filename.txt

直接修改原始檔案並備份#

sed -i.bak 's/old_string/new_string/g' filename.txt

直接修改原始檔案#

sed -i 's/old_string/new_string/g' filename.txt

只印出第五行#

sed -n '5p' filename.txt

印出第2到第4行#

sed -n '2,4p' filename.txt

印出不包含特定字串的行#

sed -n '/pattern/!p' filename.txt

印出包含特定字串的行#

sed -n '/pattern/p' filename.txt

更換分隔符#

sed 's|/old/path|/new/path|g' filename.txt

Reference#

Official docs: