您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關linux中如何使用Sed文本編輯器的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
Sed 缺少通常的文本框,而是按照用戶的命令直接寫入到文件上。
sed
命令是為 AT&T 最初的 Unix 操作系統第 7 版創建的,此后,可能每一個 Unix 和 Linux 操作系統都包含了它。sed
應用程序是一個 流編輯器,與文本編輯器不同的是,它不會打開一個視覺緩沖區,將文件的數據加載到其中進行處理。相反,它根據在終端輸入的命令或腳本中的一系列命令,逐行對文件進行操作。
如果你使用的是 Linux、BSD 或 macOS,那么你已經安裝了 GNU 或 BSD 版的 sed
。這是兩個不同的原始 sed
命令的重新實現,雖然它們很相似,但也有一些小的區別。GNU sed
通常被認為是功能最豐富的 sed
,而且它在這些平臺上都可以廣泛使用。
如果你找不到 GNU sed
(在非 Linux 系統上通常被稱為 gsed
),那么你可以從 GNU 網站上下載它的源代碼。安裝 GNU sed
的好處是,可以使用它的額外功能,但它也可以被限制為只符合 sed
的 POSIX 規范,如果你需要移植性的話。
在 Windows 上,你可以用 Chocolatey 來安裝 GNU sed
。
sed
應用程序一次只處理一行。因為它沒有視覺顯示,所以它在內存中創建了一個模式空間:一個包含輸入流的當前行的空間(去掉任何尾部的換行符)。一旦填充了模式空間,你對 sed
的指令就會被執行。有時你的指令是有條件的,有時是無條件的,所以這些指令的結果取決于你如何使用 sed
。
當命令結束時,sed
會將模式空間的內容打印到輸出流中。默認的輸出流是標準輸出,但可以將其重定向到一個文件,甚至使用 --in-place=.bak
選項重定向到同一個文件中。
然后再從下一個輸入行開始循環。
sed
命令的語法是:
$ sed --options [optional SCRIPT] [INPUT FILE or STREAM]
在可視化編輯器中,你通常不需要考慮太多,就能在文本文件中找到你想要修改的內容。你的眼睛(或屏幕閱讀器)會掃描文本,找到你想改變的單詞或你想插入或刪除文本的地方,然后你就可以開始輸入了。而 sed
沒有交互模式,所以你需要告訴它必須滿足什么條件才能運行特定的命令。
在這些例子中,假設一個名為 example.txt
的文件包含了這樣的文字:
helloworldThis is line three.Here is the final line.
指定行號告訴 sed
只對文件中的那一行進行操作。
例如,下面這條命令選擇文件的第 1 行并打印出來。因為 sed
在處理后的默認操作也是打印一行到標準輸出,這樣做的效果就是重復第一行:
$ sed '1p' example.txthellohelloworldThis is line three.Here is the final line.
你也可以步進式指定行號。例如,1~2
表示每兩行選擇一行(“從第一行開始每兩行選擇一行”)。指令 1~3
表示從第一行開始,每三行選擇一行:
$ sed '1p' example.txthellohelloworldThis is line three.Here is the final line.Here is the final line.
你可以通過使用 $
作為選擇器,只對文件的最后一行進行操作:
$ sed '$p' example.txthelloworldThis is line three.Here is the final line.Here is the final line.
在 GNU sed
中,你可以選擇多行(例如,sed '1,$p'
打印第一行和最后一行)。
任何數字或位置的選擇,你都可以用感嘆號(!
)字符反轉。下面這將選擇除第一行以外的所有行:
$ sed '1!p' example.txthelloworldworldThis is line three.This is line three.Here is the final line.Here is the final line.
你可以把模式匹配想象成文字處理器或瀏覽器中的查找操作。你提供一個詞(一個 模式),然后選擇了結果。模式匹配的語法是 /pattern/
:
$ sed '/hello/p' example.txthellohelloworldThis is line three.Here is the final line.$ sed '/line/p' example.txthelloworldThis is line three.This is line three.Here is the final line.Here is the final line.
一旦你找到了你要編輯的內容,你就可以執行你想要的任何操作。你可以用 sed
中的命令來執行編輯。sed
中的命令不是 sed
命令本身。如果這樣說有幫助的話,可以把它們看作是“動作”或“動詞”或“指令”。
sed
中的命令是單個字母,例如前面例子中使用的打印命令的 p
。它們一開始可能很難記憶,但和所有事情一樣,你會隨著練習而了解它們。
p
指令打印當前模式空間中的任何內容。
d
指令刪除模式空間:
$ sed '$d' example.txthelloworldThis is line three.$ sed '1d' example.txtworldThis is line three.Here is the final line.
s
命令搜索一個模式并將其替換為其他東西。這可能是 sed
最流行和最隨意的用法,而且它通常是用戶學習的第一個(有時也是唯一的)sed
命令。幾乎可以肯定它是文本編輯中最有用的命令:
$ sed 's/world/opensource.com/' example.txthelloopensource.comThis is line three.Here is the final line.
在你的替換文本中,也可以使用一些特殊的功能。例如,\L
將替換文本轉換為小寫,\l
則只轉換下一個字符。還有其他一些功能,列在 sed
文檔中(你可以用 info sed
命令查看)。
替換子句中的特殊字符 &
指的是匹配到的模式:
$ sed 's/is/\U&/' example.txthelloworldThIS is line three.Here IS the final line.
你也可以通過特殊的標志來影響 s
如何處理它找到的內容。g
(應該是指 全局)標志告訴 s
對行上找到的所有匹配項進行替換,而不僅僅是第一個匹配項:
$ sed 's/is/\U&/g' example.txthelloworldThIS IS line three.Here IS the final line.
其他重要的標志還包括用一個數字來表示要影響第幾個出現的匹配模式:
$ sed 's/is/\U&/2' example.txthelloworldThis IS line three.Here is the final line.
w
標志,后面跟著一個文件名,_只有_在有變化的情況下,才會將匹配的行寫入文件:
$ sed 's/is/\U&/w sed.log' example.txthelloworldThIS is line three.Here IS the final line.$ cat sed.logThIS is line three.Here IS the final line.
標志可以組合:
$ sed 's/is/\U&/2w sed.log' example.txthelloworldThis IS line three.Here is the final line.$ cat sed.logThis IS line three.
有很多很棒的網站都有 sed
“單行腳本”,它們給你提供了面向任務的 sed
命令來解決常見的問題。然而,自己學習 sed
可以讓你寫出自己的單行腳本,而且這些單行腳本可以根據你的具體需求來定制。
sed
的腳本可以在終端中寫成一行,也可以保存到文件中,然后用 sed
本身執行。我傾向于把小腳本寫成一個命令,因為我發現自己在現實生活中很少重復使用 sed
命令。當我寫一個 sed
腳本時,通常都是針對一個文件的。例如,在寫完這篇文章的初稿后,我用 sed
來規范 “sed” 的大小寫,而這是我可能永遠也不會再做的任務。
你可以向 sed
發出一系列不同的命令,用分號(;
)分開。
$ sed '3t ; s/line/\U&/' example.txthelloworldThis is LINE three.This is the final line.
你也可以用大括號({}
)限制哪些結果受到影響。當你將 sed
命令用大括號括起來時,它們只適用于特定的選擇。例如,“line” 字出現在樣本文本的兩行中。你可以通過聲明所需的匹配條件($
表示最后一行),并將你希望執行的 s
命令放在緊隨其后的括號中,強制 sed
只影響最后一行:
$ sed '$ {s/line/\U&/}' example.txthelloworldThis is line three.This is the final LINE.
感謝各位的閱讀!關于“linux中如何使用Sed文本編輯器”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。