Sed#
Linux 的 sed 套件主要由 GNU 專案維護,屬於 GNU sed 工具集的一部分。
sed 代表 Stream Editor(串流編輯器)。它不會直接開啟檔案(像 vim 或 nano),而是逐行讀取內容,根據你下的指令修改後,將結果輸出到螢幕上(標準輸出)。
Install#
sudo apt-get install sedOperate#
語法#
sed [OPTION]... {script-only-if-no-other-script} [input-file]...| parameter | description |
|---|---|
| OPTION | sed 的選項參數 |
| script-only-if-no-other-script | sed 指令腳本(如果沒有其他腳本) |
| input-file | 要處理的輸入檔案 |
Common Options#
| parameter | description |
|---|---|
| -e script | 指定要執行的 sed 指令腳本 |
| -f script-file | 從指定的檔案中讀取 sed 指令腳本 |
| -i[SUFFIX] | 直接修改原始檔案,並可選擇備份 |
| -n | 不自動輸出處理結果 |
| –version | 顯示 sed 的版本資訊 |
| –help | 顯示幫助資訊 |
operations#
| operation | description | example |
|---|---|---|
| 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.txtReference#
Official docs: