基本正則表達式
字符匹配:
.:匹配任意單個字符
[]:匹配指定范圍內的任意單個字符
[^]:匹配指定范圍外的任意單個字符
[-]:匹配[]中指定范圍內的任意一個字符,要寫成遞增
POSIX字符類:
[:digit:]:匹配任意一個數字字符
[:lower:]:匹配小寫字母
[:upper:]:匹配大寫字母
[:alpha:]:匹配任意一個字母字符(包括大小寫字母)
[:alnum:]:匹配任意一個字母或數字字符
[:space:]:匹配一個包括換行符、回車等在內的所有空白符
[:punct:]:匹配標點符號
\:轉義符,將特殊字符進行轉義,忽略其特殊意義
匹配次數:
*:匹配前面的字符任意次
.*:任意長度的任意字符
\?:匹配其前面的字符0或1次;即前面的可有可無
\+:匹配其前面的字符至少1次;
\{m\}:匹配前面的字符m次;
\{m,n\}:匹配前面的字符至少m次,至多n次;
\{0,n\}:匹配前面的字符至多n次;
\{m,\}:匹配前面的字符至少m次;
位置錨定:
^:行首錨定;用于模式的最左側;
$:行尾錨定;用于模式的最右側;
^PATTERN$: 用于模式匹配整行;
^$: 空行;
^[[:space:]]*$:空白行
單詞錨定:
\< 或 \b:詞首錨定;用于單詞模式的左側;
\> 或 \b:詞尾錨定;用于單詞模式的右側;
\<PATTERN\>:匹配整個單詞;
分組:
\(\):將一個或多個字符捆綁在一起,當作一個整體進行處理;\(xy\)*ab
Note: 分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3, …
\1: 從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符;
\2:從左側起,第二個左括號以及與之匹配右括號之間的模式所匹配到的字符;
\(ab\+\(xy\)*\):
\1: ab\+\(xy\)*
\2: xy
后向引用:引用前面的分組括號中的模式所匹配字符,(而非模式本身)
擴展正則表達式:
字符匹配
.:匹配任意單個字符
[]:匹配指定范圍內的任意單個字符
[^]:匹配指定范圍外的任意單個字符
[-]:匹配[]中指定范圍內的任意一個字符,要寫成遞增
POSIX字符類:
[:digit:]:匹配任意一個數字字符
[:lower:]:匹配小寫字母
[:upper:]:匹配大寫字母
[:alpha:]:匹配任意一個字母字符(包括大小寫字母)
[:alnum:]:匹配任意一個字母或數字字符
[:space:]:匹配一個包括換行符、回車等在內的所有空白符
[:punct:]:匹配標點符號
\:轉義符,將特殊字符進行轉義,忽略其特殊意義
匹配次數:
*:匹配前面的字符任意次
.*:任意長度的任意字符
?:匹配其前面的字符0或1次;即前面的可有可無
+:匹配其前面的字符至少1次;
{m}:匹配前面的字符m次;
{m,n}:匹配前面的字符至少m次,至多n次;
{0,n}:匹配前面的字符至多n次;
{m,}:匹配前面的字符至少m次;
位置錨定:
^:行首錨定;用于模式的最左側;
$:行尾錨定;用于模式的最右側;
^PATTERN$: 用于模式匹配整行;
^$: 空行;
^[[:space:]]*$:空白行
單詞錨定:
\< 或 \b:詞首錨定;用于單詞模式的左側;
\> 或 \b:詞尾錨定;用于單詞模式的右側;
\<PATTERN\>:匹配整個單詞;
分組:
():將一個或多個字符捆綁在一起,當作一個整體進行處理;
(xy)*abNote:分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3, …
\1: 從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符;
\2:從左側起,第:二個左括號以及與之匹配右括號之間的模式所匹配到的字符;
后向引用:引用前面的分組括號中的模式所匹配字符,(而非模式本身)
或者:
a|b
C|cat: C或cat
例題:
1、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使用兩種方式)
grep “^[sS]” /proc/meminfo
? ? ? grep -i “^s” /proc/meminfo
? ? ? grep -e ^s -e ^S /proc/meminfo
? ? ? grep “^S \| ^s” /proc/meminfo
2、顯示/etc/passwd文件中不以/bin/bash結尾的行;
grep -v “/bin/bash$” /etc/passwd
3、顯示/etc/passwd文件中ID號最大的用戶的用戶名;
sort -t: -k 3 /etc/passwd | cut -d: -f 1 | tail -n 1
4、如果用戶root存在,顯示其默認的shell程序;
? id root &> /dev/null && grep “^root\>” /etc/passwd | cut -d: -f7
5、找出/etc/passwd中的兩位或三位數;
? grep “\<[0-9]\{2,3\}\>” /etc/passwd –color=auto
6、顯示/etc/rc.d/rc.sysinit文件中,至少以一個空白字符開頭的且后面存非空白字符的行;
grep “^[[:space:]]\+[^[:space:]]” /etc/rc.d/rc.sysinit
7、找出”netstat -tan”命令的結果中以’LISTEN’后跟0、1或多個空白字符結尾的行;
?? netstat -tan | grep “LISTEN[[:space:]]*$”
8、添加用戶bash、testbash、basher以及nologin(其shell為/sbin/nologin);而后找出/etc/passwd文件中用戶名同shell名的行;
? ? ? ?? grep “^\([[:alnum:]]\+\>\).*\1$” /etc/passwd
9、顯示/etc/passwd文件中其默認shell為非/sbin/nologin的用戶;
grep -v “/sbin/nologin$” /etc/passwd
10、顯示/etc/passwd文件中其默認shell為/bin/bash的用戶;
grep “/bin/bash$” /etc/passwd
11、找出/etc/passwd文件中的一位數或兩位數:
grep –color=auto “\b[0-9]\{1,2\}\b” /etc/passwd
12、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;
grep “^[:space:]\+[^[:space:]]” /boot/grub/grub.conf
13、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行;
grep “^#.*[:space:]\+[^[:space:]]” /boot/grub/grub.conf
14、使用echo命令輸出一個絕對路徑,使用grep取出其基名;
echo “/etc/passwd/” | grep -o “[[:alpha:]]\+” | tail -n
1擴展:取出其路徑名
echo “/etc/passwd” | sed ‘s@[^/]\+/\?$@@’
?例題:
1、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使用三種方式)
egrep “^[sS]” /proc/meminfo
? ? ?? egrep -i “^s” /proc/meminfo
? ? ?? egrep “^(s|S)” /proc/meminfo
2、顯示/etc/passwd文件中不以/bin/bash結尾的行;
? egrep -v “/bin/bash$” /etc/passwd
3、顯示/etc/passwd文件中ID號最大的用戶的用戶名;
sort -t: -k 3 /etc/passwd | cut -d: -f 1 | tail -n 1
4、如果用戶root存在,顯示其默認的shell程序;
id root &> /dev/null && egrep “^root\>” /etc/passwd | cut -d: -f7
5、找出/etc/passwd中的兩位或三位數;
egrep “\<[0-9]{2,3}\>” /etc/passwd
6、顯示/etc/rc.d/rc.sysinit文件中,至少以一個空白字符開頭的且后面存非空白字符的行;
egrep “^[[:space:]]+[^[:space:]]” /etc/rc.d/rc.sysinit
7、找出”netstat -tan”命令的結果中以’LISTEN’后跟0、1或多個空白字符結尾的行;
netstat -tan | egrep “LISTEN[[:space:]]*$”
8、添加用戶bash、testbash、basher以及nologin(其shell為/sbin/nologin);而后找出/etc/passwd文件中用戶名同shell名的行;
egrep “^([[:alnum:]]+\>).*\1$” /etc/passwd
9、顯示/etc/passwd文件中其默認shell為非/sbin/nologin的用戶;
egrep -v “/bin/nologin” /etc/passwd
10、顯示/etc/passwd文件中其默認shell為/bin/bash的用戶;
egrep “/bin/bash” /etc/passwd
11、找出/etc/passwd文件中的一位數或兩位數;
egrep “\b[0-9]{1,2}\b” /etc/passwd
12、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;
egrep “[:space:]+[^[:space:]]” /boot/grub/grub.conf
13、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行;
egrep “^#+[:space:]+[^[:space:]]” /boot/grub/grub.conf
14、打出netstat -tan命令執行結果中以‘LISTEN’,后或跟空白字符結尾的行;
egrep “^#.*[:space:]+[^[:space:]]” /boot/grub/grub.conf
15、使用echo命令輸出一個絕對路徑,使用grep取出其基名;
echo “/etc/passwd/” | egrep -o “[[:alpha:]]+” | tail -n 1
擴展:取出其路徑名
echo “/etc/passwd” | sed ‘s@[^/]\+/\?$@@’
16、顯示當前系統root、centos或user1用戶的默認shell和UID;
egrep ‘^(root|centos|user1)\>’ /etc/passwd | cut -d: -f1,3,7
17、找出/etc/rc.d/init.d/functions文件(centos6)中某單詞后面跟一個小括號的行;
egrep -o “^[_[:alpha:]]+\(\)” /etc/rc.d/init.d/functions
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/86847