Linux sed 命令詳解

唐青枫發表於2024-11-19

簡介

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

相關文章