正則表達式

1、正則表達式元字符的意義和用法

(1)“*”號:匹配*號前面的字符0次或多次的重複;

str*普通字符r,匹配0次或多次即string.stre,strg等;

(2)“.”匹配任意一個字

...76.前三個.任意字符6個任意字符,需要注意的是“.”符號只能匹配一個字符;

(3)“^”匹配行首字符,表示是以“^”後面字符開頭的行;

^money表示匹配以money開頭的行;

綜合舉例:^...x86*,表示:前三個字符爲任意字符,4、5、6爲x86,7個開始可以重複匹配6的字符串開頭的行;

(4)"$"匹配行尾,$符號放在匹配符號之後,與^用法和功能相反;

money$表示以money結尾的所有行;

例子:①!^$表示以空開頭的行首和以空結束的行尾,中間沒有任何字符,即表示匹配空行;

   ②^.$表示匹配只有一個字符的行;

(5)“[]”匹配字符集合,該符號支持窮舉法列出的字符集中所有的元素,也可以使用“-”符號表示字符集的範圍;

例子:[0123456789]表示任意一個數據,[0-9]也表示任意一個數字;

  [a-z]表示所有的小寫字母;[A-Z] 表示所有的大寫字母;

 []A-Za-z] []A-Za-z]*表示匹配任意引文單詞;

特別注意:^符號匹配行首,但是在[^]表示取反;例如:[^b-d]表示不在b~d範圍內的所有字符;

(6)“\”轉義字符,用來屏蔽一個字符元的特殊意義‘

例子:\.中的“.”不在匹配任意字符,而就只是表示普通字符句號.的含義;

(7)\<\>符號精確匹配符號,用符號"\"屏蔽符號"<>"

例子:\<money\>不在匹配包含money字符的單詞,只精確匹配money單詞;

(8)"\{\}"系列符號與“*”符號類似,都是表示前一個字符的重複,但是"*"表示重複0次或任意次,而"\{\}"可以指定重複次數;系列符號有以下三種是喲個方法:

①\{n\}表示前面字符出現n次;

例子:MO\{\3}NEY只匹配MOOONEY,O出現3次;

②\{n,\}表示前面字符出現至少n次;

例子:MO\{3,\}表示匹配MOOONEY,MOOOONEY,MOOOOONEY,匹配O出現3次以上的;

③\{n,m\}表示匹配前面字符出現n~m次;

例子:MO\{3,4\}NEY表示匹配MOOONEY和MOOOONEY;

[A-Z]\{5\}精確匹配任意5個大寫字母組成的字符,MONEY,HOUSE等;

(9)"?"符號,匹配該符號前面1次或0次;

例子:JO?B;匹配JOB或JOOB;

(10)"+"匹配符號前面的字符至少一次;與*的區別是"*"可以匹配0次;

例子:JO+B匹配JOOB,JOOOB,但是不匹配JOB;

(11)符號"()"和"|"通常結合使用,表示一組可選字符集;()符號很少使用,因爲[]符號完全能夠替代;

例子:re(a|e|o)d或re[aeo]d,(a|e|o)表達式表示在a/e/o中任選一個字符,即reed、read、reod可由該表達式匹配;

2、通配

bash shell本身不支持正則表達式,使用正則表達式的是shell命令和工具,如grep、awk和sed等;通配的情況下有些符號和正則表達式中的符號含義不是完全一致,例如:*符號不在表示匹配前面字符的重複次數,而是任意多個任意字符;^符號不在表示行首,而是代表取反;?不在表示匹配符號前面1次或者0次,而是任意一個字符;

例子: echo [a-h]*.awk,查找匹配以a~h字符開頭並以.awk後綴結尾的文件並顯示出來;通配種表達式{}符號中用","號隔開表示或的關係,例如

{[a-h]*.awk,0?.pem}表示匹配以a-h中字符開頭並以.awk結尾的所有文件和以0開頭,後面只跟一個任意字符.並以.pem結尾的文件;

3、grep命令

grep是一種強大的文本搜索工具,它能夠使用正則表達式將搜素文本並將匹配的行打印出來;

grep [選項][模式][文件]

如下分別說明選項、模式都有哪些:

(1)選項:

-c只輸出匹配行的數量

-i搜索時忽略大小寫

-h查詢多個文件是不顯示文件名

-l只列出符合匹配的文件名,不列車具體哪一行;

-n列出所有的匹配行並顯示行號

-s不顯示不存在或無匹配文本的錯誤的信息

-v顯示不包含匹配的所有行

-w匹配整個單詞

-x匹配整行

-r遞歸搜索,不僅搜索當前工作目錄而且還搜索子目錄

-q不顯示任何搜索結果,以退出狀態表示搜索成功與否

-b打印匹配行距離文件頭的偏移量,以字節爲單位

-o與-b選項結合使用,打印匹配的詞距離文件頭部的偏移量,以字節爲單位

-E支持擴展的正則表達式

-F不支持正則表達式,按照字符串的字面意思進行匹配

(2)模式:

grep的模式非常靈活,可以是字符串、變量、正則表達式,特別注意無論模式是何種形式,只要模式中間有空格必須使用“”雙引號將其括起來,否則會誤認爲搜索的目標爲文件名;

(3)grep和正則表達式結合使用:

例子:①搜索後綴名爲.sh文件,以echo開頭的所有行;grep  -c  ^echo *.sh

②搜索.sh文件結尾的文件中空白行:grep -c ^$  script.sh

③搜索script.sh中money不區分大小寫,並將所有匹配的行打印出來包含行號:grep -n "[Mm][Oo][Nn][Ee][Yy]" script.sh

④搜索“-”開頭的重複“-”任意次,然後是M字符的行:grep ^-*M filename

⑤搜索文件中以"/"開頭,中間是任意四個字符,第六個字符仍然是“/”的行:grep -n ^/..../ filename

⑥搜索文件中包含sed.suf.frg字符串的行:grep -n sed\.suf\.frg filename

grep擴展egrep等價於grep -E;fgrep等價於gerp -F

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章