awk 模式匹配

2022-09-16 15:45:21 字數 3211 閱讀 9310

使用awk作為文字處理工具,正規表示式是少不了的。 要掌握這個工具的正規表示式使用。其實,我們不必單獨去學習它的正規表示式。正規表示式就像一門程式語言,有自己語法規則已經表示意思。 對於不同工具,其實大部分表示意思相同的。在linux眾多文字處理工具(awk,sed,grep,perl)裡面用到正規表示式。其實就只有3種型別:linux shell 正規表示式 。只要是某些工具是屬於某種型別的正規表示式。那麼它的語法規則基本一樣。awk的正規表示式是屬於:擴充套件的正規表示式(extended regular expression 又叫 extended regex 簡稱 eres)。

一、awk extended regular expression (eres)基礎表示式符號:

字元功能

+指定如果乙個或多個字元或擴充套件正規表示式的具體值(在+(加號)前)在這個字串中,則字串匹配。命令列:

awk '/smith+ern/' testfile

將包含字元 smit,後跟乙個或多個 h 字元,並以字元ern 結束的字串的任何記錄列印至標準輸出。此示例中的輸出是:

smithern, harry smithhern, anne

?指定如果零個或乙個字元或擴充套件正規表示式的具體值(在 ?(問號)之前)在字串中,則字串匹配。命令列:

awk '/smith?/' testfile

將包含字元 smit,後跟零個或乙個 h 字元的例項的所有記錄列印至標準輸出。此示例中的輸出是:

smith, alan smithern, harry smithhern, anne smitters, alexis

|指定如果以 |(垂直線)隔開的字串的任何乙個在字串中,則字串匹配。命令列:

awk '/allen | alan /' testfile

將包含字串 allen 或 alan 的所有記錄列印至標準輸出。此示例中的輸出是:

smiley, allen smith, alan

( )在正規表示式中將字串組合在一起。命令列:

awk '/a(ll)?(nn)?e/' testfile

將具有字串 ae 或 alle 或 anne 或 allnne 的所有記錄列印至標準輸出。此示例中的輸出是:

smiley, allen smithhern, anne

指定如果正好有 m 個模式的具體值位於字串中,則字串匹配。命令列:

awk '/l/' testfile

列印至標準輸出

smiley, allen

指定如果至少 m 個模式的具體值在字串中,則字串匹配。命令列:

awk '/t/' testfile

列印至標準輸出:

smitters, alexis

指定如果 m 和 n 之間(包含的 m 和 n)個模式的具體值在字串中(其中m<= n),則字串匹配。命令列:

awk '/er/' testfile

列印至標準輸出:

smithern, harry smithern, anne smitters, alexis

[string]

指定正規表示式與方括號內 string 變數指定的任何字元匹配。命令列:

awk '/sm[a-h]/' testfile

將具有 sm 後跟以字母順序從 a 到 h 排列的任何字元的所有記錄列印至標準輸出。此示例的輸出是:

smawley, andy

[^string]

在 [ ](方括號)和在指定字串開頭的 ^ (插入記號) 指明正規表示式與方括號內的任何字元不匹配。這樣,命令列:

awk '/sm[^a-h]/' testfile

列印至標準輸出:

smiley, allen smith, alan smithern, harry smithhern, anne smitters, alexis

~,!~

表示指定變數與正規表示式匹配(代字型大小)或不匹配(代字型大小、感嘆號)的條件語句。命令列:

awk '$1 ~ /n/' testfile

將第乙個字段包含字元 n 的所有記錄列印至標準輸出。此示例中的輸出是:

smithern, harry smithhern, anne

^指定欄位或記錄的開頭。命令列:

awk '$2 ~ /^h/' testfile

將把字元 h 作為第二個欄位的第乙個字元的所有記錄列印至標準輸出。此示例中的輸出是:

smithern, harry

$指定欄位或記錄的末尾。命令列:

awk '$2 ~ /y$/' testfile

將把字元 y 作為第二個欄位的最後乙個字元的所有記錄列印至標準輸出。此示例中的輸出是:

smawley, andy smithern, harry

. (句號)

表示除了在空白末尾的終端換行字元以外的任何乙個字元。命令列:

awk '/a..e/' testfile

將具有以兩個字元隔開的字元 a 和 e 的所有記錄列印至標準輸出。此示例中的輸出是:

smawley, andy smiley, allen smithhern, anne

*(星號)

awk '/a.*e/' testfile

smawley, andy smiley, allen smithhern, anne smitters, alexis

\ (反斜槓)

轉義字元。當位於在擴充套件正規表示式中具有特殊含義的任何字元之前時,轉義字元除去該字元的任何特殊含義。例如,命令列:

/a\/\//

將與模式 a // 匹配,因為反斜槓否定斜槓作為正規表示式定界符的通常含義。要將反斜槓本身指定為字元,則使用雙反斜槓。有關反斜槓及其使用的更多資訊,請參閱以下關於轉義序列的內容。

二、awk 常見呼叫正規表示式方法

awk 『/reg/』

/reg/為正規表示式,可以將$0中,滿足條件記錄 送入到:action進行處理.

[chengmo@centos5 ~]$ awk 'begin}'

ok

gsub( ere, repl, [ in ] )

sub( ere, repl, [ in ] )

match( string, ere )

split( string, a, [ere] )

awk模式匹配

在這篇文章中,我們將看到許多小的,甚至沒有什麼意義的例子,但他們能夠驗證awk程式指令碼的主要 特點。當awk讀入一行時,它試圖匹配指令碼中的每個模式匹配規則。只有與乙個特定的模式相匹配的輸入行才能成為操作物件。如果沒有指定操作,與模式相匹配的輸入行將被列印出來 執行列印語句是乙個預設操作 參閱下面...

awk的模式匹配

awk的模式匹配 awk begin pattern end 當我們需要在文字中取出一段東西的時候,可以使用awk。awk和sed一樣是個比較妖的東西,有正則,但是正則語法又和linux下的不一樣。1.awk 正則 file 2.awk 正則1 正則2 file 在1中,被正規表示式匹配到的行,將會...

awk匹配整行

如果沒有指定操作,則單個正規表示式將對整行進行模式匹配,並列印出所匹配的行。可以使用元字元 來表示需要進行行首匹配的正規表示式。範例 cat employees tom jones 44245 12 66543354 mary adams 534611 4 6328765 sally chang 1...