sed是一個行編輯器,通常一次隻處理一行資料,預設不編輯原檔案,而是把原來的資料複制一份到記憶體中執行編輯操作,可以對行進行删除,增加,替換,選取等特×××。
工具原理:
sed讀取檔案的内容放到記憶體中,我們通常稱作為模式空間,sed會通過正規表達式比對模式空間中符合條件的行,比對到的行會進行編輯操作,有可能會輸出到頻幕上,這得看你的編輯操作了,原本讀取到的行預設會輸出到頻幕上,你可以不讓它輸出,sed會一直從第一行讀取到最後一行。
sed還有段空間,被稱為保持空間,當你讀取行檔案到模式空間,模式空間會把讀取到的行檔案儲存到保持空間,我們還可以實作模式空間和保持空間的對換編輯。
sed指令:
sed的正規表達式元字元
元字元
功能
示例
示例的比對對象
^
行首定位符
/^love/
比對所有以love開頭的行
$
行尾定位符
/love$/
比對所有以love結尾的行
.
比對除換行符外的單個字元
/l..e/
比對包含字母l後跟兩個任意字元在跟字母e的行
*
比對零個或多個前導字元
/*love/
比對在零個或多個空格緊跟着模式love的行
[]
比對指定字元組内的任一字元
/[ll]ove/
比對包含love和love的行
[^]
比對不在指定字元組内的任一字元
/[^a-km-z]ove/
比對包含ove,但ove之前的那個字元不在a至k或m至z之間的行
\(..\)
儲存已比對的字元
s/\(love\)able/\1er/
标記元字元之間的模式,并将其儲存為标簽1,之後可以用好\1來引用它。最多可定義9個标簽,從左邊開始編号,最左邊的是第一個。在這個示例中,loe被儲存在寄存器1裡,之後被替換串引用,結果loveable被替換為lover。
&
儲存查找串以便在替換串中引用
s/love/**&**/
符号&代表查找串。字元串love将替換前後各加了兩個星号的引用,即love變成**love**
\<
詞首定位符
/\<love/
比對包含以love開頭的單詞的行
\>
詞尾定位符
/love/>/
比對包含以love結尾的單詞的行
x\{m\}
連續m個x
/o\{5\}/
分别比對出現連續5個字母o、至少5個連續的o、或5-10個連續的o的行
x\{m,\}
至少m個x
/o\{5,\}/
x\{m,n\}
至少m個但不超過n個x
/o\{5,10\}/
常用選項:
-n:不輸出模式空間中的内容至螢幕;
-e :多點編輯;
-f /path/to/sed_script_file:指定sed腳本
注意:sed腳本後邊不能有空格
-r, --regexp-extended:支援使用擴充正規表達式;
-i[suffix], --in-place[=suffix]:編輯的結果儲存到原檔案中
位址定界:
(1) 空位址:預設是對全文進行處理;
(2) 單位址:
#:指定行;
/pattern/:被此模式所比對到的每一行;
(3) 位址範圍
#,#:比對兩者之間的内容帶其本身
#,+#:比對從本行往後的#行
#,/pat1/:比對本行到比對到的字元的行
/pat1/,/pat2/:比對兩字元串之間的内容,包括本身
$:最後一行;
(4) 步進:~
1~2:所有奇數行
2~2:所有偶數行
編輯指令:
d:删除;
上面删除第一行
p:顯示模式空間中的内容;
顯示第一行
a \text:在行後面追加文本“text”,支援使用\n實作多行追加;
i \text:在行前面插入文本“text”,支援使用\n實作多行插入;
c \text:把比對到的行替換為此處指定的文本“text”;
w /path/to/somefile:儲存模式空間比對到的行至指定的檔案中;
r /path/from/somefile:讀取指定檔案的内容至目前檔案被模式比對到的行後面;檔案合并;
=:為模式比對到的行列印行号;
!:條件取反;
位址定界!編輯指令;
s///:查找替換,其分隔符可自行指定,常用的有s@@@, s###等;
替換标記:
g:全局替換;
w /path/to/somefile:将替換成功的結果儲存至指定檔案中;
p:顯示替換成功的行;