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
就像單兵作戰時的秘密武器,如果我們能夠熟練的掌握,就能夠做到手中有糧遇事不慌,借此機會在老板面前展示一番,那么你的前途就大大的了。