簡介
sed
的全稱是:Stream Editor
流編輯器,在 Linux
中是一個強大的文字處理工具,可以處理檔案或標準輸入流。
基本語法
sed [options] 'command' file
透過管道傳輸入流:
echo "text" | sed 'command'
常用子命令
文字替換(s
)
sed 's/old/new/' file
# s代表文字替換
# old表示被替換的舊文字
# new表示替換的新文字
- 替換第一次匹配到的文字
sed 's/Linux/Unix/' file
- 替換所有匹配到的文字(
g
)
sed 's/Linux/Unix/g' file
- 替換時不區分大小寫(
i
)
sed 's/linux/unix/gi' file
刪除文字行(d
)
sed '<n>d' file
# n代表第幾行
- 刪除指定行的文字
sed '2d' file
- 刪除指定範圍行的文字
sed '5,10d' file
- 刪除模式匹配到的行
sed '/pattern/d' file
追加文字(a
)
sed '/pattern/a\new text' file
- 在模式匹配到的文字下面新增一行文字
sed '/Linux/a\This is added text' file
插入文字(i
)
sed '/pattern/i\new text' file
- 在模式匹配到的文字上面新增一行文字
sed '/Linux/i\This is inserted text' file
替換指定行的內容(c
)
sed '<n>c\new content' file
# n表示第幾行
sed '3c\new content' file
列印與模式匹配的行文字(p
)
sed -n '/pattern/p' file
# -n 表示抑制預設的列印輸出,不加此選項會列印兩遍
# p 表示列印文字
sed -n '/Linux/p' file
修改後覆蓋原始檔(-i
)
sed -i 's/old/new/g' file
sed -i 's/Linux/Unix/g' file
同時執行多個 sed
子命令(-e
)
使用 -e
選項或把命令放在檔案中
sed -e 's/old/new/' -e '/pattern/d' file
新建一個檔案,sed_commands.sed
s/old/new/
5,10d
透過 -f
指定 sed
命令檔案
sed -f sed_commands.sed file
替換指定行模式匹配到的文字
sed '3s/old/new/' file
刪除空白行
sed '/^$/d' file
# ^表示行首,$表示行尾
# ^$合在一起,就表示行首和行尾之間沒有任何內容,即空白行
新增行號
sed = <file> | sed 'N;s/\n/\t/'
# 第一步:sed = <file> 會生成行號,且列印如下的文字格式:
# 1
# Line 1 content
# 2
# Line 2 content
# 第二步:透過 | 管道傳到下一個sed命令
# 第三步:N子命令合併當前行和下一行的內容,如下:
# 1\nLine 1 content
# 第四步:替換 \n 為 \t,如下:
# 1\tLine 1 content
# 最終輸入結果:
# 1 Line 1 content
# 2 Line 2 content
提取指定行範圍的文字
sed -n '5,10p' file
# 列印第5到第10行的文字
替換指定行範圍的文字
sed '5,10s/old/new/g' file
# 替換僅在第5到第10行模式匹配的文字
移除行尾的空格
sed 's/[ \t]*$//' file
# [ \t] 表示匹配空格或者tab(\t)
# * 表示匹配0個或多個
# $ 表示行尾
# // 表示替換成空
同時操作多個檔案
sed 's/old_string/new_string/g' filename1.txt filename2.txt
結合 find
命令操作
find /file -type f -exec sed -i 's/old_string/new_string/g' {} \;
操作後追加到新檔案
sed -n 's/pattern/p' logfile.log > extracted_data.txt
多種跳脫字元的使用
- 使用反斜槓
\
sed 's/\/old\/path/\/new\/path/' file
- 使用豎線或者叫管道符號
|
sed 's|/old/path|/new/path|' file