博客 / 詳情

返回

Linux sed 命令詳解

簡介

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
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.