grep之正則表達式的理解及應用
阿新 • • 發佈:2017-07-30
grep
正則表達式在本周學習中是個難點和重點,其中難免會有很多坑,也難免會不停的往裏跳,當跳的比較多了也就長記性了,通過很多次練習慢慢也就能發現其中暗藏玄機,成功的避開大坑選擇往小坑裏跳了,我相信在以後的學習中會不斷進步、勤加練習終究會跳出來的。好了,以下是本人對正則表達式的一點理解,如有錯誤之處請聯系我,會修改和學習的。
一、正則表達式之grep.
正則表達式是一種符號表示法,用於識別文本模式。Linux處理正則表達式的主要程序是grep。grep搜索與正則表達式匹配的行,並將結果輸送至標準輸出。
(1)正則表達式之匹配模式。
①格式
grep按下述方式接受選項和參數(其中,REGEXP 表示正則表達式)
grep [option] REGEXP file
②具體選項
選項 | 含義 | 功能描述 |
-i | ignore case | 忽略大小寫 |
-v | invert match | 不匹配匹配的 |
-l | file-with-match | 輸出匹配的文件名 |
-L | file-without-match | 輸出不匹配的文件名 |
-c | count | 輸出匹配的數目(行數) |
-n | number | 輸出匹配行的同時在前面加上文件名及在文件名中的行數 |
-h | no-filename | 抑制文件名的輸出 |
③舉例說明
1、 顯示/proc/meminfo文件中以大小s開頭的行
2、顯示/proc/meminfo文件中不以s開頭的行
3、顯示/proc/meminfo文件中大s開頭的行數
4、顯示/proc/meminfo文件中大s開頭的行數並且在文件名上加上行數
華麗的分割線
二、下表包含了元字符的列表以及它們在正則表達式上下文中的行為:
字符 | 說明 |
^ | 匹配輸入字符串開始的位置。如果設置了 RegExp 對象的 Multiline 屬性,^ 還會與“\n”或“\r”之後的位置匹配。 |
$ | 匹配輸入字符串結尾的位置。如果設置了 RegExp 對象的 Multiline 屬性,$ 還會與“\n”或“\r”之前的位置匹配。 |
* | 零次或多次匹配前面的字符或子表達式。例如,zo* 匹配“z”和“zoo”。* 等效於 {0,}。 |
+ | 一次或多次匹配前面的字符或子表達式。例如,“zo+”與“zo”和“zoo”匹配,但與“z”不匹配。+ 等效於 {1,}。 |
? | 零次或一次匹配前面的字符或子表達式。例如,“do(es)?”匹配“do”或“does”中的“do”。? 等效於 {0,1}。 |
{n} | n 是非負整數。正好匹配 n 次。例如,“o{2}”與“Bob”中的“o”不匹配,但與“food”中的兩個“o”匹配。 |
{n,} | n 是非負整數。至少匹配 n 次。例如,“o{2,}”不匹配“Bob”中的“o”,而匹配“foooood”中的所有 o。“o{1,}”等效於“o+”。“o{0,}”等效於“o*”。 |
{n,m} | M 和 n 是非負整數,其中 n <= m。匹配至少 n 次,至多 m 次。例如,“o{1,3}”匹配“fooooood”中的頭三個 o。‘o{0,1}‘ 等效於 ‘o?‘。註意:您不能將空格插入逗號和數字之間。 |
| | 或的意思。例如:"AAA|BBB"滿足的例子AAA、BBBpp |
. | 任意字符。例如:"a.c"滿足的例子abc、fapcc |
() | 將候選的所有元素放在()內,用|隔開。例如:"a(1|2|3)bc"滿足的例子a1bc、mba3bcd |
[:alnum:] | 字母和數字,與[A-Za-z0-9]等價 |
[:alpa:] | 字母,與[A-Za-z]等價 |
[:digit:] | 數字,與[0-9]等價 |
[:xdigit:] | 十六進制字符,與[0-9A-Fa-f等價] |
[:blank:] | 空格和制表符 |
[:lower:] | 小寫字母 |
[:upper:] | 大寫字母 |
grep之正則表達式的理解及應用