天天看點

sed

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:不輸出模式空間中的内容至螢幕;

sed

-e :多點編輯;

sed

-f  /path/to/sed_script_file:指定sed腳本

注意:sed腳本後邊不能有空格

sed

-r, --regexp-extended:支援使用擴充正規表達式;

sed

-i[suffix], --in-place[=suffix]:編輯的結果儲存到原檔案中 

sed

位址定界:

(1) 空位址:預設是對全文進行處理;

(2) 單位址:

#:指定行;

/pattern/:被此模式所比對到的每一行;

(3) 位址範圍

#,#:比對兩者之間的内容帶其本身

#,+#:比對從本行往後的#行

#,/pat1/:比對本行到比對到的字元的行

/pat1/,/pat2/:比對兩字元串之間的内容,包括本身

sed

$:最後一行;

(4) 步進:~

1~2:所有奇數行

sed

2~2:所有偶數行

sed

  編輯指令:

d:删除;

sed

上面删除第一行

p:顯示模式空間中的内容;

sed

顯示第一行

a  \text:在行後面追加文本“text”,支援使用\n實作多行追加; 

sed

i  \text:在行前面插入文本“text”,支援使用\n實作多行插入; 

sed

c  \text:把比對到的行替換為此處指定的文本“text”;

sed

w /path/to/somefile:儲存模式空間比對到的行至指定的檔案中;

sed

r  /path/from/somefile:讀取指定檔案的内容至目前檔案被模式比對到的行後面;檔案合并;

sed

=:為模式比對到的行列印行号;

sed

!:條件取反;

位址定界!編輯指令;

sed

s///:查找替換,其分隔符可自行指定,常用的有s@@@, s###等;

sed

替換标記:

g:全局替換;

sed

w /path/to/somefile:将替換成功的結果儲存至指定檔案中;

sed

p:顯示替換成功的行;

sed