sed正則表達式


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

匹配除單詞邊界符外所有字符:字符的左邊和右邊同時是單詞字符或非單詞字符。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM