sed指令應用廣泛,使用簡單,是快速文字處理的利器。它其實沒太多技巧,背誦、使用是最適合的學習管道,屬於硬技能。但它又很複雜,因為高級功能太多。本篇不關注sed的進階功能,僅對常用的一些操作,進行說明。
隨著使用,你會發現它和vim的一些理念是想通的,正規表示式的語法基本上也一樣,並沒有太多學習成本。從個人視野和工作效率來看,sed指令都是程式設計師必須掌握的重要工具。
那些說可以現場google用法的,大多習慣將文字拷貝到excel裡,慢慢磨洋工,遇到大批量文件更是手忙腳亂。不是一家人不進一家門,這篇文章不是為你寫的。
一個簡單的入門
#如圖,一個簡單的sed指令包含三個主要部分:參數、範圍、操作。要操作的文件,可以直接掛在命令列的最後。除了命令列,sed也可以透過-f參數指定一個sed腳本,這個屬於進階用法,不做太多描述。
相關推薦:《linux教學》
有些範例指令我會重複多次,聰明如你一定能發現其中規律,有時連解釋都用不著。
參數
-n 這個參數是--quiet或--silent的意思。表示忽略執行過程的輸出,只輸出我們的結果即可。
我們常用的還有另一個參數 :-i。
使用此參數後,所有變更將在原始檔案上執行。你的輸出將覆蓋原文件。非常危險,一定要注意。
範圍
1,4 表示找出檔案中1,2,3,4行的內容。
這個範圍的指定很有靈性,請看以下範例(請自行替換圖中的範圍部分)。
範圍的選擇也可以使用正規匹配。請看下面範例。
為了直觀,下面的指令一一對應上面的介紹,範圍和運算之間是可以有空格的。
操作
最常用的動作就是p,意思是列印。例如,以下兩個指令就是等同的:
除了列印,還有以下操作,我們來說常用的。
a,i,c等操作雖基本但使用少,不做介紹。我們依然拿一些命令來說明。
我們來看sed指令都能乾些啥,上點指令體驗一下。
刪除所有#開頭的行和空白行。
最常用的,例如下面這個。
表示列印group檔案中的第二行。
那麼我想一次執行多個指令,還不想寫sed腳本檔怎麼辦?那就需要加-e參數。
sed的操作單元是行。
取代模式
以上是sed指令的常用符合模式,但它還有一個強大的取代模式,意思是尋找取代其中的某些值,並輸出結果。使用替換模式很少使用-n參數。
替換模式的參數有點多,但第一部分和第五部分都是可以省略的。替換後會將整個文字輸出出來。
前半部用來匹配一些範圍,而後半部執行替換的動作。
範圍
這個範圍和上面的範圍語法類似。看下面的例子。
具體指令為:
Command
The command here refers to s. That is what substitute means.
Find matches
The search part will find the string to be replaced. This part can accept pure strings or regular expressions. See the example below.
The command is similar:
Replace
It’s time to find The outgoing string has been replaced. The content of this section replaces the content found in the Find Matches section.
Unfortunately, regular expressions cannot be used in this part. The most commonly used one is exact replacement. For example, replace a with b.
But there are also advanced features. Similar to the regular API of Java or Python, the replacement of sed also has the meaning of Matched Pattern, and Group can also be obtained, without going into details. Commonly used substitution symbols are. No., repeat it again. When used in a replacement string, it represents the original search match data.
#The following command will surround each line in the file with quotation marks.
flag parameter
These parameters can be used individually or in multiples. Only the most commonly used ones are introduced.
Look at the syntax of the two commands:
Due to regularity, many characters need to be escaped. You will do a lot of \\, \* and other processing in the script. You can use |^@! four characters to replace \.
For example, the following five commands are the same.
Note: This method cannot be used for the first half of the range. I'm used to using the symbol @.
Others
Regular expression
As you can see, regular expressions are everywhere in the command line. Below is a brief explanation.
Parameter i
The parameter i has been briefly introduced above. Its function is to allow the operation to be executed on the original file. No matter what you do, the original file will be overwritten. This is very dangerous.
By adding a parameter, the original file can be backed up.
sed -i.bak 's/a/b/' file
The above command will take effect on the original file file and generate a file.bak file. It is strongly recommended to use the i parameter to also specify the bak file.
We use two commands to take a look at the power of sed combined with other commands.
Output lines with a length of not less than 50 characters
Statistics on how many times each word appears in the file
Find the py file in the directory and delete all line-level comments
Look at lines 5-7 and 10-13
Only output the ip address
以上是Linux生產環境中最常用的一套「Sed「技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!