使用 sed 進行文本修改的各種姿勢


SED 介紹

sed(Stream Editor)意為流編輯器,是Unix常見的命令行程序。是Bell實驗室的 Lee E.McMahon 在1973年到1974年之間開發完成,目前可以在大多數操作系統中使用。

sed 的出現是作為 grep 的一個繼任者,因為 grep 只能簡單的進行查找和替換,但是考慮還可能會有刪除等各種需求,McMahon 開發了一個更具通用性的工具。sed 著名的語法規則包括使用 / 進行模式匹配,以及 s/// 來進行替代。與同期存在的工具 ed 一起,sed 的語法影響了后來發展的 ECMAScript 和 Perl。GNU sed 添加了很多特性,包括著名的 in-place editing。

語法

看一下 sed 的基本語法:

sed [-nefri] 'command' [file ...]
sed '{[/]<n>|<string>|<regex>[/]}d' <fileName>
sed '{[/]<adr1>[,<adr2>][/]d' <fileName>

The sed utility reads the specified files, or the standard input if no files are specified, modifying the input as specified by a list of commands. The input is then written to the standard output.

sed 從文件或者標准輸入中獲取內容,然后按照命令列表對內容進行修改,最后再將結果發送給標准輸出。

一些常用選項的含義:

  • -n 使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN的資料一般都會被列出到螢幕上。但如果加上 -n 參數后,則只有經過sed 特殊處理的那一行(或者動作)才會被列出來。
  • -e 直接在指令列模式上進行 sed 的動作編輯。
  • -f 直接將 sed 的動作寫在一個文件內,通過 -f 參數執行文件內的動作。
  • -i 直接修改讀取的文件的內容,而不是打印到標准輸出。

一些常用的命令:

  • a 新增
  • d 刪除
  • s 替換
  • p 打印

刪除文件的內容

通過 d 參數加匹配規則,我們可以方便的刪除文件中的內容。

$ sed '3d' fileName.txt   #刪除第3行,並將修改打到標准輸出
$ sed -i '3d' fileName.txt #刪除第3行,並在文件內生效,后面的命令不再加這個參數

# 刪除最后一行
$ sed '$d' fileName.txt

# 刪除7-9行
$ sed '7,9d' fileName.txt

# 刪除所有空行
$ sed '/^$/d' fileName.txt 
$ sed '/./!d' fileName.txt

# 刪除匹配到字符串的行
$ sed '/awk/d' fileName.txt 

# 刪除兩個匹配之間所有的行
$ sed '/patternA/,/patternB/d' fileName.txt

# 刪除匹配的行到第 n(5) 行之間的內容,同理也可以反過來,刪除某一行到匹配行之間的內容
$ sed '/pattern/,5d' fileName.txt

# 刪除符合多個條件的行
$ sed '/patternA/d;/patternB/d' fileName.txt

替換文件的內容

如果只是想修改某一行的部分內容,可以使用 g 參數,具體示例如下。

$ sed 's/^/ABC /' fileName.txt #在每一行增加ABC

$ sed 's/patternA/String/' fileName.txt #將匹配的內容替換為指定的字符串

雖然容器、雲基礎設施非常普遍的今天,在企業做運維場景下我們直接使用 sed 命令的機會逐漸變少。但 sed就像單兵作戰時的秘密武器,如果我們能夠熟練的掌握,就能夠做到手中有糧遇事不慌,借此機會在老板面前展示一番,那么你的前途就大大的了。

參考資料:

  1. sed delte file lines
  2. SED入門
  3. sed 刪除文本中的內容


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM