linux awk 正則表達式、正則運算符詳細介紹

使用awk作為文本處理工具,正則表達式是少不了的。 要掌握這個工具的正則表達式使用。其實,我們不必單獨去學習它的正則表達式。正則表達式就像一門程序語言,有自己語法規(guī)則已經(jīng)表示意思。 對于不同工具,其實大部分表示意思相同的。在linux眾多文本處理工具(awk,sed,grep,perl)里面用到正則表達式。其實就只有3種類型。詳細可以參考:linux shell 正則表達式(BREs,EREs,PREs)差異比較 。只要是某些工具是屬于某種類型的正則表達式。那么它的語法規(guī)則基本一樣。 通過那篇文章,我們知道awk的正則表達式,是屬于:擴展的正則表達式(Extended Regular Expression 又叫 Extended RegEx 簡稱 EREs)。
一、awk Extended Regular Expression (ERES)基礎表達式符號介紹
字符 | 功能 |
---|---|
+ | 指定如果一個或多個字符或擴展正則表達式的具體值(在 +(加號)前)在這個字符串中,則字符串匹配。命令行:
awk '/smith+ern/' testfile 將包含字符 smit,后跟一個或多個 h 字符,并以字符 ern 結(jié)束的字符串的任何記錄打印至標準輸出。此示例中的輸出是: 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} | 指定如果正好有 m 個模式的具體值位于字符串中,則字符串匹配。命令行:
awk '/l{2}/' testfile 打印至標準輸出 smiley, allen |
{m,} | 指定如果至少 m 個模式的具體值在字符串中,則字符串匹配。命令行:
awk '/t{2,}/' testfile 打印至標準輸出: smitters, alexis |
{m, n} | 指定如果 m 和 n 之間(包含的 m 和 n)個模式的具體值在字符串中(其中m <= n),則字符串匹配。命令行:
awk '/er{1, 2}/' testfile 打印至標準輸出: smithern, harry smithern, anne smitters, alexis |
[String] | 指定正則表達式與方括號內(nèi) String 變量指定的任何字符匹配。命令行:
awk '/sm[a-h]/' testfile 將具有 sm 后跟以字母順序從 a 到 h 排列的任何字符的所有記錄打印至標準輸出。此示例的輸出是: smawley, andy |
[^ String] | 在 [ ](方括號)和在指定字符串開頭的 ^ (插入記號) 指明正則表達式與方括號內(nèi)的任何字符不匹配。這樣,命令行:
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 將具有以零個或更多字符隔開的字符 a 和 e 的所有記錄打印至標準輸出。此示例中的輸出是: smawley, andy smiley, allen smithhern, anne smitters, alexis |
\ (反斜杠) | 轉(zhuǎn)義字符。當位于在擴展正則表達式中具有特殊含義的任何字符之前時,轉(zhuǎn)義字符除去該字符的任何特殊含義。例如,命令行:
/a\/\// 將與模式 a // 匹配,因為反斜杠否定斜杠作為正則表達式定界符的通常含義。要將反斜杠本身指定為字符,則使用雙反斜杠。有關反斜杠及其使用的更多信息,請參閱以下關于轉(zhuǎn)義序列的內(nèi)容。 |
與PERs相比,主要是一些結(jié)合類型表示符沒有了:包括:”\d,\D,\s,\S,\t,\v,\n,\f,\r”其它功能基本一樣的。 我們常見的軟件:javascript,.net,java支持的正則表達式,基本上是:EPRs類型。
二、awk 常見調(diào)用正則表達式方法
awk語句中:
awk ‘/REG/{action}’
/REG/為正則表達式,可以將$0中,滿足條件記錄 送入到:action進行處理.
awk正則運算語句(~,~!等同!~)
[chengmo@centos5 ~]$ awk 'BEGIN{info="this is a test";if( info ~ /test/){print "ok"}}'
ok
awk內(nèi)置使用正則表達式函數(shù)
gsub( Ere, Repl, [ In ] )
sub( Ere, Repl, [ In ] )
match( String, Ere )
split( String, A, [Ere] )
詳細函數(shù)使用,可以參照:linux awk 內(nèi)置函數(shù)詳細介紹(實例)
通過上面細述,不知道大家有沒有對awk正則表達式有一個更加清楚的認識。 有什么問題可以與我交流!
相關文章
總結(jié)Linux中用于文本處理的awk、sed、grep命令用法
這篇文章主要介紹了Linux中用于文本處理的awk、sed、grep命令用法總結(jié),是Linux入門學習中的基礎知識,需要的朋友可以參考下2016-03-21- 這篇文章主要介紹了Linux命令之a(chǎn)wk命令使用介紹,本文只是簡單的講解了sed的語法以及使用實例,需要的朋友可以參考下2016-06-05
- 這篇文章主要介紹了Linux下的命令行編程工具Awk的入門簡介,Awk主要是用來進行一些系統(tǒng)中的文件操作,需要的朋友可以參考下2015-06-10
Awk 命令學習總結(jié)、AWk命令系列學習(linux shell學習必備)
學習linux 的同人,都知道linux shell文本處理能力非常強大2013-11-19- 這篇文章主要介紹了Linux下的AWK入門教程,AWK工具甚至能夠自編程實現(xiàn)功能,是非常強大的文本分析工具,需要的朋友可以參考下2015-08-11
- awk是款文本處理工具,提供多種功能,那么如何使用awk進行數(shù)組排序呢?下面小編就給大家詳細介紹下Linux中如何使用awk進行數(shù)組排序2015-01-20
linux awk 內(nèi)置函數(shù)詳細介紹(實例)
這節(jié)詳細介紹awk內(nèi)置函數(shù),主要分以下3種類似:算數(shù)函數(shù)、字符串函數(shù)、其它一般函數(shù)、時間函數(shù)2013-11-19linux shell awk 流程控制語句(if,for,while,do)詳細介紹
awk中,流程控制語句,語法結(jié)構(gòu),與c語言類型。下面是各個語句用法2013-11-19- awk 是一種很棒的語言,它適合文本處理和報表生成,其語法較為常見,借鑒了某些語言的一些精華,如 C 語言等。在 linux 系統(tǒng)日常處理工作中,發(fā)揮很重要的作用,掌握了 awk2018-02-18