正則表達式:是一類字符所書寫出的模式(pattern)
元字符:不表示字符自己的意義,用於額外功能性的描述。分爲基本正則表達式和擴展正則表達式git
基本正則表達式的元字符:
字符匹配:
.:任意單個字符
[ ]:指定範圍內的任意單個字符
[0-9],[[:digit:]] 數字
[a-z],[[:lower:]] 小寫字母
[A-Z],[[:upper:]] 大寫字母
[[:alpha:]] 大小寫字母
[[:alnum:]] 數字和字母
[[:space:]] 空白字符
[[:punct:]] 標點符號
[^]:指定範圍外的任意字符
次數匹配:用來指定匹配其前面的字符的次數
:任意次
.:匹配任意長度的任意字符
\?:0次或1次
{m}:匹配m次
{m,n}:匹配最少m次,最多n次
{m,}:至少m次
{0,n\:至多n次
eg:1.匹配passwd文件中以大寫R或者小寫r開頭、中間跟着任意兩個字符、T或者t結尾的行
grep --color=auto [Rr]..[Tt]>\ /etc/passwd正則表達式
2.匹配passwd文件中以大寫R或者小寫r開頭、中間跟着任意長度字符、T或者t結尾的行
grep --color=auto [Rr].*[Tt] /etc/passwdshell
3.接着題2,中間又不能存在標點字符的行
grep --color=auto [Rr][^[:punct:]]*[Tt] /etc/passwdbash
位置瞄定:用於指定字符出現的位置
^:瞄定行首 (grep --color=auto ^[Rr][^[:punct:]][Tt] /etc/passwd 大寫或者小寫R爲行開頭的行
$:瞄定行尾 (匹配以bash結尾的行 grep 'bash$' /etc/passwd
^$:空白行
單詞的位置錨定
\<char :錨定詞首,\b
char\> : 錨定詞尾,char\b
分組:
()
(ab)xy 匹配ab出現的次數
abxy 匹配b出現的次數
引用:
\1:後向引用,引用前面的第一個左括號以及與之對應的右括號中的模式匹配到的內容,意思是說前面出現一次,在\1這也要出現一次
eg: 4. 匹配用戶名和默認bash同樣的行
grep "^([[:alnum:]]{1,})\>.\1$" /etc/passwd ( \1去引用([[:alnum:]]{1,})匹配到的內容. ^([[:alnum:]]{1,})意思是字母和數字開頭至少有一位的內容ide
練習:
一、顯示/proc/meminfo文件中的以大小寫s的開頭的行
grep -i "^s" /proc/meminfo
二、取出默認shell爲非bash的用戶
grep -v "bash$" /etc/passwd |cut -d: -f1
三、取出默認shell爲bash的且其ID號最大的用戶
grep "bash$" /etc/passwd |cut -d: -f1|sort -n -t: -k3|tail -1
四、顯示/etc/rc.d/rc.sysinit文件中,以#開頭,後面跟至少一個空白字符,然後又有至少一個非空白字符的行
grep "^#[[:space:]]{1,}[^[:space:]]{1,}" /etc/rc.d/rc.sysinit
五、顯示/boot/grub/grub.conf中以致少一個空白字符的行
grep "^[[:space:]]{1,}" /boot/grub/grub.conf
六、查出/etc/passwd中一位數或兩位數
grep --color=auto "\<[0-9]{1,2}\>" /etc/passwdspa