正規表示式和grep,sed,awk

2021-06-29 08:48:16 字數 4279 閱讀 8054

正規表示式定義:它使用單個字串來描述或匹配一系列符合某個句法規則的字串。

「^」表示行的開始,「^#」表示以#開始的行。「$」表示行的結尾,「#$」表示以#結尾的行。「^$」表示空行。

「[ ]」中括號內為字元組合,代表字元組合中的任意乙個,「[0-9a-za-z]」表示任一數字或大小寫字母。「[^a-z]」表示不在a-z字元內的任一字元。

「.」 表示任意乙個字元。「*」表示零個或多個前面的字元。「.*」表示零個或多個任意字元。「?」表示零個或乙個前面的字元。「+」表示乙個或多個前面的字元。

「」表示n個前面的字元。「」表示n1到n2個前面的字元,其中n1「( )」表示乙個整體,「(aa)+」表示乙個或多個aa。

「aaa|bbb」表示字串aaa或者字串bbb。

grep和egrep的用法:

egrep是grep的加強版,除了具有grep所有功能外,還可使用「+」,「?」,「|」,「( )」等字元,grep要使用這些字元要加脫意字元「\」。

-c:列印符合要求的行數。

-i:忽略大小寫。

-n:輸出符合要求的行及其行號。

-v:列印不符合要求的行。

-a:後面跟乙個數字n,有無空格都可以,表示列印符合要求的行以及下面n行。

-b:後面跟乙個數字n,有無空格都可以,表示列印符合要求的行以及上面n行。

-c:後面跟乙個數字n,有無空格都可以,表示列印符合要求的行以及上下各n行。

例子:grep -c2 'aaa' file:將檔案file含字串aaa的行及其上下各兩行都列印出來。

grep -nv 'aaa' file:將檔案file不含字串aaa的行列印,並輸出行號。

grep -v '^#' file | grep -v '^$':將檔案file所有不以#開頭的行且非空行列印輸出。 

grep -v '[0-9]' file:將檔案file所有不含數字的行列印。包括空行。

grep '[^0-9]' file:將檔案file所有含非數字字元的行列印。空行不含字元,所以不包括空行。

grep '^[^a-za-z]' file:將檔案file所有以非大小寫字母開頭的行列印。不包括空行。

grep '[^a-za-z]' file:將檔案file所有含非大小寫字母字元的行列印。不包括空行。

grep 'a..d' file:將檔案file中含有a..d的行列印。a..d表示a和d中間有兩個任意字元。

grep '.*' file:列印檔案file所有行。包括空行。

grep 'a\' file:將檔案file中含有字串aa的行列印。

egrep 'a+' file:將檔案file中含有乙個或多個a的字串的行列印。

egrep 'a?' file:將檔案file中含有零個或乙個a的字串的行列印。

egrep 'aaa|bbb|ccc' file:將檔案file中含字串aaa或bbb或ccc的行列印。符合多個條件的只列印一次。

egrep '(aaa)+' file:將檔案file中含有乙個或多個aaa的字串的行列印。

sed的用法:

-n:取消預設輸出。

-i:直接修改原檔案內容。

例子:sed -n 'n1,n2'p file:列印檔案file的第n1行到第n2行,其中p表示列印,最後一行用$表示。

sed -n '/aaa/'p file:列印檔案file中包含字串aaa的行。

sed -e 'n'p -e '/aaa/'p -n file:列印檔案file的第n行,列印含有字串aaa的行。執行順序是依次掃瞄每一行,若該行符合第乙個條件則列印一次,若其符合第二個條件則再列印一次。直至行末。

sed 'n1,n2s/aaa/bbb/g' file:將檔案file第n1行至第n2行中所有的字串aaa替換為字串bbb。其中s表示替換,g表示本行全域性替換,如果不加g則只替換本行出現的第乙個。分隔符除了用「/」還可以用其他特殊字元,如「#」和「@」。

sed 'n1,n2s/[a-za-z]//g' file:將檔案file第n1行至第n2行中所有的字母濾除。

sed 's/\(aaa\)\(.*\)\(bbb\)/\3\2\1/' file:將檔案file中同一行內的字串aaa和bbb調換位置。小括號在sed中屬於特殊符號,需在前面加脫意字元「\」。用小括號把要替換的字串括成乙個整體,替換時分別用\1,\2,\3代表第1,第2,第3個字串所放的位置。

sed 's/^.*$/aaa&/' file:將檔案file所有行前面加上字串aaa。&用來儲存被搜尋的字串,如s/love/**&**/,love這成**love**。

sed 's/.*a$//;s/^b.*//' file:將檔案file中以a結尾的行或者以b開頭的行濾除。執行順序是依次掃瞄每一行,對該行依次進行第乙個替換動作和第二個替換動作。

錯誤用法:

sed 'n1,n2/aaa/'d file:定位行號和篩選字串的功能不可共用。

sed -n 'n1,n2/aaa/'p file:定位行號和篩選字串的功能不可共用。

sed '13;/aaa/'p -n file:目前已知「;」僅能用在兩個替換動作之間。

awk的用法:

用分隔符隔開的叫做字段,$0表示整行,$n表示第n欄位,n>0。分隔符後面要用單引號括起,裡面是篩選條件和處理動作,動作要用「」括起,print表示列印動作,動作後面可以跟$0或$n或自定義的內容,跟多個$n要用逗號隔開,自定義的內容要用雙引號括起。被篩選的字串要用「//」括起。不加「」來指定列印的內容時,預設列印符合「」外條件的行。

awk中可以用邏輯符號進行判斷,邏輯符號有:==,!=,>,>=,<,<=。例如「==」表示等於,即精確匹配。「!=」表示不匹配。若邏輯符號右側是數字,加雙引號的數字表示字串,不加雙引號的數字表示數學中的數字。若右側是字串,則必須加雙引號。可以用「&&」和「||」在同乙個awk語句中連線兩個邏輯符號表示式,分別表示「並且」和「或者」。

awk有內建變數,常用的有nf和nr。nf表示用分隔符分隔後一共有多少字段,nr表示行號。

awk中可以使用if判斷和for迴圈。

-f:指定分隔符,分隔符用單引號括起來,例如:-f ':'。如果不加該選項,則預設以空格或tab鍵為分隔符。如果使用awk更改了記憶體中的內容,那麼列印時會以預設的空格為分隔符列印,可以用ofs=「分隔符」來指定分隔符。

例子:head -n2 file |awk -f ':' '':列印檔案file前兩行的第一字段。

awk '/aaa/' file:將檔案file中含有字串aaa的行列印。

awk -f ':' '$1 ~/aaa/' file:將檔案file中第乙個字段含有字串aaa的行列印。「~」表示模糊匹配,只要包含就行。

awk -f ':' '/aaa/ /bbb/ ' file:將檔案file中含有字串aaa的行的第一二個字段列印,含有字串bbb的行的第三四個字段列印。執行順序是依次掃瞄每一行,若該行符合第乙個條件則列印一次,若其符合第二個條件則再列印一次。直至行末。

awk -f ':' '$1>=5' file:將檔案file中第乙個欄位在數學上大於5的行列印。例如:23>5。

awk -f ':' '$1>="5"' file:將檔案file中第乙個欄位在字元上大於5的行列印。例如:23<5。

awk -f ':' '$1>$2' file:將檔案file中第乙個欄位在數字上大於第二個欄位的行列印。

awk -f ':' '$1>"5" && $1<"7"' file:將檔案file中第乙個欄位在字元上大於5且小於7的行列印。

awk -f ':' '$1>"5" || $7=="/bin/bash"' file:將檔案file中第乙個欄位在字元上大於5或第七個欄位為「/bin/bash」的行列印。

awk -f ':' '':將檔案file中每行最後乙個字段列印。

awk 'nr>20' file:將檔案file中第20行之後的行列印。

awk -f ':' 'nr>20 && $1 ~ /aaa/' file:將檔案file第20行之後且第乙個字段含有字串「aaa」的行列印。

awk -f ':' '$1="aaa"' file:將檔案file中每行的第乙個字段改為aaa並列印。

awk -f ':' '$8=$1+$2' file:將檔案file中每行的第八個字段改為第一二個欄位的和並列印。

awk -f ':' '' file:將檔案file中每行的第八個字段改為第一二個欄位的和,改變只會存於電腦記憶體中,不會列印出來。

awk -f ':' '' file:將檔案file中每行的第八個字段改為第一二個欄位的和並列印。

awk -f ':' '' file:將檔案file中每行的第乙個字段求和並列印。end表示所有的行都已經執行。

awk -f ':' '' file:將檔案file中第乙個欄位為aaa的行列印。

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

qt 正規表示式 和 常用正規表示式應用

在使用輸入框是,有時需要限定輸入的內容為數字或其他,或者是以某種固定的形式輸入字串,比如輸入年月日。限定只能輸入數字 qregexp rx qregexp 0 9 qregexp類提供使用正規表示式的模式匹配 qregexpvalidator validator newqregexpvalidato...