1、概述
sed是stream editor的簡稱,也就是流編輯器。他一次處理一行內容,處理時,把當前處理的行存儲在臨時緩存區,稱為“pattern space”,接着用sed命令處理緩存區的內容,處理完成后,把緩存區的內容送往屏幕。接着處理下一行,這樣不斷重復,直到文件末尾。文件內容並沒有改變,出發你使用重定向存儲輸出。
2、語法
命令格式
sed [option] 'command' input_file
option:
-n:使用silent模式。在一般的用法中,所有來自stdin的內容一般都會被列出到屏幕上。但如果加上-n參數后,則只有經過sed特殊處理的那一行才會被列出來
-e:直接在指令列模式上進行sed的動作編輯
-f:直接將sed的動作寫在一個文件內,-f filename則可以執行filename內的sed命令
-r:讓sed命令支持擴展的正則表達式 (默認是基礎正則表達式)
-i:直接修改讀取的文件內容,而不是有屏幕輸出
常用命令:
a\:追加行,a\的后面跟上字符串s(多行字符串可以使用\n分隔),則會在當前選擇的行后的后面都加上字符串s
c\:替換行,c\后面跟上字符串s(多行字符串都可以用\n分隔),則會將當前選擇的行替換成字符串s
i\:插入行,i\后面跟上字符串s(多行字符串都可以用\n分隔),這會在當前選擇的行的前面都插入字符串s
d:刪除行delete,該命令會將當前選擇的行刪除
p:打印print,該命令會打印當前選擇的行到屏幕上
y:替換字符,通常y命令的用法是這樣的:y/Source-chars/Dest-chars/,分隔字符/可以用任意單字符替換,用Dest-chars中對應位置的字符串替換掉Source-chars中對應位置的字符串
s:替換字符串,通常s名領導用戶是這樣的:1,$s/Regexp/Replacement/Flages,分隔字符/可以用其他任意單字符替換,用Replacement替換掉匹配字符串
替換選項:
\digit:Replacement中可含有后引用中的\digit(digit是1至9),引用前面定義的子表達式
&:代表模式空間中的整個匹配部分
\L:將在其后的替換部分轉換成小寫字母,直到發現一個\u或\E,GUN擴展功能
\l:將下一個字符轉換成小寫字母,GNU擴展功能
\U:將在其后的替換部分轉換成大寫字母,直到發現一個\L或\E,GNU擴展功能
\u:將下一個字符轉換成大寫字母,GNU擴展功能
\E:停止由\L或\U指示開始的大小寫轉換,GNU擴展功能
標志選項
g:將用Replacement替換模版空間中所有匹配Regexp的部分,則不僅僅是第一個匹配部分
digit:只用Replacement替換模版空間中第digit(digit是1至9)個匹配Regexp的部分
p:若發生了替換操作,指示顯示模版空間中新的數據
w file-name:若發生了替換操作,指示將模版空間中新的數據寫入指定的文件file-name中
i:表示進行Regexp匹配時,是不區分大小寫字母的
3、基本正則表達式
元字符 |
說明 |
* |
將*前面的正則表達式匹配的結果重復任意次(含0次)。 |
\+ |
與星號(*)相同,只是至少重復1次,GNU的擴展功能。 |
\? |
與星號(*)相同,只是最多重復1次,GNU的擴展功能。 |
\{i\} |
與星號(*)相同,只是重復指定的i次。 |
\{i,j\} |
與星號(*)相同,只是重復i至j次。 |
\{i, \} |
與星號(*)相同,只是至少重復i次。 |
\(regexp\) |
將regexp看作一個整體,用於后向引用,與\digit配合使用。 |
. |
匹配任意單個字符。 |
^ |
匹配模版空間開始處的NULL字符串。 |
$ |
匹配的是模版空間結束處的NULL字符串。 |
[list] |
匹配方括號中的字符列表中的任意一個。 |
[^list] |
否定匹配方括號中的字符列表中的任意一個。 |
regexp1\|regexp2 |
用在相鄰的正則表達式之間,表示匹配這些正則表達式中任一個都可以。匹配是從左向右開始的,一旦匹配成功就停止匹配。 |
regexp1regexp2 |
匹配regexp1和regexp2的連接結果。 |
\digit |
匹配正則表達式前半部分定義的后向引用的第digit個子表達式。digit為1至9的數字, 1為從左開始。 |
\n |
匹配換行符。 |
\meta |
將元字符meta轉換成普通字符,以便匹配該字符本身,有$、 *、 .、 [、 \ 和 ^。 |
擴展正則表達式
擴展正則表達式除了以下元字符與基本正則表達式不同外,其余相似。
基本正則表達式 |
擴展正則表達式 |
\? |
? |
\+ |
+ |
\| |
| |
\{ \} |
{ } |
\( \) |
( ) |
常用轉義字符
轉義字符 |
說明 |
\a |
匹配一個BEL字符。 |
\f |
匹配一個換頁字符。 |
\n |
匹配一個換行字符。 |
\r |
匹配一個回車字符。 |
\t |
匹配一個水平Tab字符。 |
\v |
匹配一個垂直Tab字符。 |
\cX |
匹配Control+X,X是任意字符。 |
\dXXX |
匹配一個ASCII碼是十進制XXX的字符。 |
\oXXX |
匹配一個ASCII碼是八進制XXX的字符。 |
\xXX |
匹配一個ASCII碼是十六進制XX的字符。 |
\w |
匹配任意一個單詞字符(字母、數字和下划線)。 |
\W |
匹配任意一個非單詞字符。 |
\b |
匹配一個單詞的邊界符:字符的左邊是一個單詞字符,並且右邊是一個非單詞字符,反之亦然。 |
\B |
匹配除單詞邊界符外所有字符:字符的左邊和右邊同時是單詞字符或非單詞字符。 |