正則表達式及grep使用方法
grep: Global search REgular expression and Print out the line.
文本搜索工具,根據用戶指定的“模式(pattern)”對目標文本進行過濾,顯示被模式匹配到的行。
grep [OPTION]... 'PATTERN' FILE...
--color
正則表達式:由一類字符書寫的模式,其中有些字符不表示字符的字面意義,而是表示控制或通配的功能;
元字符:
兩類:
基本正則表達式
擴展正則表達式
基本正則表達式:
字符匹配:
.: 匹配任意單個字符
[]:匹配指定集合中的任意單個字符
[[:digit:]], [0-9]
[[:lower:]], [a-z]
[[:upper:]], [A-Z]
[[:alpha:]], [a-zA-Z]
[[:alnum:]], [0-9a-zA-Z]
[[:space:]],空白字符
[[:punct:]],標點符號
[^]:匹配指定集合外的任意單個字符
匹配次數:用於對其前面緊鄰的字符所能夠出現的次數作出限定
*: 匹配其前面的字符任意次,0,1或多次;
例如:grep 'x*y'
xy, xxy, xxxy, y
\?:匹配其前面的字符0次或1次;
例如:grep 'x\?y'
xy, xxy, y, xxxxxy, aby
\+: 匹配其前面的字符出現至少1次;
\{m\}: 匹配其前面的字符m次;
例如:grep 'x\{2\}y'
xy, xxy, y, xxxxxy, aby
\{m,n\}:匹配其前面的字符至少m次,至多n次;
例如: grep 'x\{2,4\}y'
xy, xxy, y, xxxxxxy, aby
grep 'x\{0,4\}y'
xy, xxy, y, xxxxxxxxxy, aby
grep 'x\{2,\}y'
xy, xxy, y, xxxxxy
.*: 匹配任意長度的任意字符
位置錨定:
^: 行首錨定
寫在模式的最左側
$: 行尾錨定
寫在模式的最右側
^$: 空白行
\<: 詞首錨定, 或\b
出現在要查找的單詞模式的左側;\<char
\>:詞尾錨定, 或\b
出現在要查找的單詞模式的右側;char\>
\<pattern\>: 匹配單詞
分組: \(\)同時匹配多個字符
例如:'ab\{1,3\}x' 可以匹配abx abbx abbbx
'\(ab\)\{1,3\}x' 可以匹配abx ababx abababx
後向引用:模式中,如果使用\(\)實現了分組,在某行文本的檢查中,如果\(\)的模式匹配到了某內容,此內容後面的模式中可以被引用;
\1, \2, \3
模式自左而右,引用第#個左括號以及與其匹配右括號之間的模式匹配到的內容;
grep選項:
-v: 反向選取
-o: 僅顯示匹配到內容
-i: 忽略字符大小寫
-E: 使用擴展正則表達式
-A #: 匹配到的行向下多顯示#行
-B #:匹配到的行向下多顯示#行
-C #:匹配到的行向上向下多顯示#行
擴展正則表達式:
和基本正則表達式大同小異,一般在匹配時無需加轉義符\,只有幾個特定的需要加轉義\
*,?,+,{m},{m,n},^,$,\<,\>,\1,\2
條件選擇:a|b
練習:
1、顯示/proc/meminfo文件中以大寫或小寫S開頭的行;
2、顯示/etc/passwd文件中其默認shell爲非/sbin/nologin的用戶
3、顯示/etc/passwd文件中其默認shell爲/bin/bash的用戶;
並上述結果中其ID號最大的用戶;
4,找出當前系統上其用戶名和默認shell相同的用戶
5,找出/etc/passwd文件中的一位數或兩位數;
6,顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;
7,顯示/etc/rc.d/rc.sysinit文件中,以#開頭,後面跟至少一個空白字符,而後又有至少一個非空白字符的行;