Bash 中的 sed 命令
sed
命令是一個基於替換概念的流式文字編輯器。
它用於發現、插入、替換和刪除檔案片段。你可以使用此程式修改檔案而無需開啟它們。
本教程將介紹 sed
Linux 程式的基礎知識、其語法以及直接用於搜尋和替換檔案的正規表示式語法。
Bash sed
語法
sed
通常用於處理來自標準輸入或檔案的文字流。這意味著你可以將另一個命令的輸出直接傳遞到實用程式的輸入進行編輯,或者你可以與已經建立的檔案進行互動。
預設情況下,所有結果都傳送到標準輸出,這意味著它們將顯示在螢幕上,而不是儲存到檔案中,直到重定向。
以下是命令語法:
$ sed [options] commands [file-to-edit]
file-to-edit
表示檔案的位置,而 options
表示操作給定檔案時的規則。以下是它的一些主要選擇:
-n, -quiet
:每次迭代後,不輸出模板緩衝區的內容。-e
:執行以進行編輯的命令。-f
:從檔案中讀取編輯命令。-i
:在編輯之前建立檔案的備份副本。-l
:允許你設定行長。-r
:支援擴充套件的正規表示式語法。-s
:傳輸多個檔案時,將它們視為單獨的流,而不是一個冗長的流。
Bash sed
示例
我們建立了一個名為 demosed.txt
的檔案,並將其儲存在主目錄中,內容如下:
首先顯示主目錄中檔案 demosed.txt
的第 1 行到第 5 行。
我們將使用 p
命令來執行此操作。我們使用 -n
選項來列印我們需要的內容,而不是在每次迭代時列印模板緩衝區的全部內容。
$ sed -n '1,5p' demosed.txt
輸出:
This is the first line.
This is the second line.
This is the third line.
This is the fourth line.
This is the fifth line.
要輸出整個檔案(不包括第 1-10 行):
$ sed '1,10d' demosed.txt
我們使用 d
而不是 p
命令來刪除文字。在這種情況下,我們沒有使用 -n
選項來顯示所有內容,因為該實用程式會顯示我們使用 delete
命令時未刪除的所有內容,而是使用 d
命令清除不需要的內容。
輸出:
This is the eleventh line.
This is the twelveth line.
This is the thirteenth line.
This is the fifteenth line.
正如預期的那樣,只列印了從 11 到 15 的行。
當我們開啟 demosed.txt
時,我們將看到與執行前一個命令時相同的命令。
出於安全考慮,sed
預設情況下不會更改原始檔。 -i
選項表示就地編輯
,可用於篡改原始檔案。
要從檔案中刪除 14th
行:
$ sed -i '13~15d' demosed.txt
上面的命令沒有給出任何輸出。讓我們看看檔案裡面的內容。
與檔案的舊版本相比,我們看到第 14 行帶有文字 This is thirteenth line.
不見了。
正規表示式也可以在 sed
中與 options
一起使用。讓我們看一個例子。
$ sed '/^nine\|^$\| *nine/d' demosed.txt
輸出:
This is the first line.
This is the second line.
This is the third line.
This is the fourth line.
This is the fifth line.
This is the sixth line.
This is the seventh line.
This is the eighth line.
This is the tenth line.
This is the eleventh line.
This is the twelveth line.
This is the fifteenth line.
'/^nine\|^$\| *nine/'
是檢測帶有單詞 nine
的句子的正規表示式操作。上面的命令不會篡改原始檔案,因為我們沒有使用 -i
,但是我們可以看到帶有 nine
的行被過濾掉了。