文字處理小工具SED用法
阿新 • • 發佈:2019-02-03
SED是Stream EDitor的縮寫,也就是SED是一個流編輯器。它的處理方式和Gvim/emacs完全不一樣。更多的是將SED用作文字處理而不是文字編輯。
一般linux系統都會內建SED命令。輸入sed會打印出help資訊。從help資訊可以看到其用法如下:
sed [options]... 'command' files...
sed的options說明:
-n : 等效- -quiet,- -silent,靜默模式,取消自動列印模式空間
-e ‘expr’: 等效 - -expression= ‘expr’,將腳步表示式新增到執行列表。
-f srcipt.f : 等效- -file= srcipt.f.新增指令碼檔案到執行列表
-i: 等效- -in-place,直接修改檔案
-r: 腳步中開啟擴充套件正則表示式支援
上述為主要的選項說明,其他的選項可檢視help得到詳細資訊。
SED以行為單位進行處理,當前處理的行存放在臨時快取區,稱為模式空間(pattern space),sed依次處理模式空間內容,並輸出到終端,如此迴圈直到處理完所有的行。
為了只對感興趣的行進行處理,需要使用定址,定址:定位到想要編輯的行,如1,5表示1到5行,/test/ 匹配到test的行。定址可以使用數字和正則表示式匹配並且可以混合使用。
a\:當前行加入一行。eg
sed '$a\\#this is the end' test.txt
其中 ’$’匹配最後一行,‘\’使用需要進行轉義。命令會在檔案最後一行後添加註釋’#this is the end’
i\:當前行前加入一行。eg
sed '1i\\#add a header' test.txt
d:刪除。eg
sed '2,$d' test.txt
除了第一行外,其他行被刪除
p:列印。預設sed會將模板空間列印到終端,因此使用’p’命令會列印兩次。需要結合-n選項進入靜默模式,則只打印定址的或匹配的行。
s/re/sting: 替換命令,用string的字串替換正則表示式re。
g:行內全面替換。eg
sed 's/PATH/path/g' test.txt
將所有的PATH替換成path。
r:讀檔案
sed '1r include.h' include.c
將檔案include.h的內容新增到include.c的第一行下面。
w:寫檔案
sed '1w include.h' include.c
將include.c的第一行寫入到include.h。
^:行首
$:行尾
.:任意一個字元
*:0個或多個字元
[]:指定範圍字元
[^]::不在指定範圍字元,取非操作
(..):儲存匹配字元
&:搜尋匹配字串儲存值。eg:
s/david/hello & /
將david替換為hello david
\<:詞首
>:詞尾
x{m}:重複x字元m次。
x{m,}:重複x字元最少m次。
x{m,n}:重複x字元m~n次。