1:什么是正則表達式:
簡單的說,正則表達式就是處理字符串的方法,它是以行為單位進行字符串的處理行為,正則表達式通過一些特殊符號的輔助,可以讓用戶輕易達到查找,刪除,替換某特定字符串的處理程序。
2:一些參數:
grep [-A] [-B] [–color=auto] ‘收索字符串’ filename
-A :后面可加數字,為after的意思,除了列出該行以外,后續的n行也被列出來。
-B :后面可加數字,為befer的意思,除了列出該行以外,前面的n行也被列出來。
–color=auto:可將正確的那個選取數據列出顏色
范例一:
dmesg | grep ‘eth’
#dmesg 可以列出內核的信息,通過grep選取網卡相關信息。
范例二:
dmesg | grep -n –color-auto ‘eth’
[root@Slave0 hadoop]# dmesg | grep -n –color=auto ‘eth’
452:[ 11.213498] 8021q: adding VLAN 0 to HW filter on deviceeth0
發現除了eth會有特殊的顏色,且加上行號顯示。
三:基礎正則表達式練習:
例1:查找特定字符串
[root@Master ~]# grep -n ‘ab’ newusers
5:Annabell:Cho:90:1
8:Rebecca:Fabry:60:1
[root@Master ~]#
如果反向選擇呢?也即是說該行沒有‘ab’這個字符串才會顯示在屏幕上
[root@Master ~]# grep -vn ‘ab’ newusers
1:Betsey:Werts:60:1
2:Henriette:Balla:30:1
3:Julieann:Hopps:30:2
4:Conrad:Menz:60:1
6:Allyn:Kenley:60:1
例2:利用中括號[]來查找集合字符。
如果我想找testhe taste這兩個單詞,可以發現,他們共同有‘t?st’存在,這個時候,我們可以這樣查找。
grep -n ‘t[ae]st’ newusers
如果查找到有dd字符時,則使用:
grep -n ‘dd’ newusers
如果不想要dd前面有g,此時可以可用集合字符的反向選擇[^]來完成。
grep -n ‘[^g]dd’ newusers
例3:行首和行尾字符^$
如果想要字符串‘the’只在行首才列出,之格式化就要用到制表符了,做法如下:
grep -n ‘^the’ filename
如果要列出字母開頭
grep -n ‘^[a-z]’ filename
如果不想要開頭是字母的
grep -n ‘^[^a-zA-Z]’ filename
注:那個^符號在字符集合符號(中括號[])之內與之外是不一樣的,在【】代表“反向選擇”,在【】之外則代表定外在行首的意義。
那么如果要找出行位結束為小數點(.)的那一行,該怎么處理呢?
grep -n ‘\.$’ filename
特別注意,小數點具有其他意義,所以必須使用轉義字符(\)加以解除他的特殊意義。
如果要找出空白行:
grep -n ‘^$’ filename
例4:任意一個字符.與重復字符*
.(小數點):代表一定有一個任意字符的意思
grep -n ‘g..d’ filename
[root@Master ~]# grep -n a..a newusers
2:Henriette:Balla:30:1
21:Elsa:Casazza:60:3
*(星號):代表重復前一個0到無窮多次的意思,為組合形態。
grep -n ‘ooo*’ filename
注,前兩個o肯定要必須存在,第三個o則是可有可無的多個o
四:基礎正則表達式字符:
RE字符 |
意義和范例 |
^word |
查找(word)在行首 |
word$ |
查找(word)在行尾 |
. |
代表一定有一個任意的字符 |
\ |
將特殊符號的特殊意義去除 |
* |
重復零個到無窮多個的前一個字符 |
[list] |
從字符集合的RE字符里面找出想要選取的字符 |
[n1-n2] |
從字符集合的RE字符里面找出想要選取的字符范圍.如:grep -n ‘[0-9]’ filename |
[^list] |
從字符集合的RE字符里面找出不要的字符串范圍。 |
\{n,m\} |
連續n到m個前一個RE字符,若為\{n\}則是連續n個的前一個RE字符,若為\{n,\}則是連續 |
五:擴展正則表達式:
grep默認僅支持基礎正則表達式,如果使用擴展型正則表達式,可以使用grep -e 不過更建議直接使用egrep.
擴展型正則表達式的特殊字符 |
|
+ |
重復一個或一個以上的前一個RE字符 |
? |
零個或者一個前一個RE字符 |
| |
用或(or)的方式找出數個字符串, |
() |
找出“組” 字符串 |
()+ |
多個重復組判別 |
|
|
|
|
|
|
l六:練習
Lifconfig 192.168.0.211
H獲取IP
#I if config |grep [0-9]\{1,3\} 獲取第一位“198“ 一到三位數字
\ ([0-9}\{1,3\}\.\)\{3\} 分成一個組后給其三位“198.”
“\ ([0-9}\{1,3\}\.\)\{3\} [0-9]\{1,3}” 最后給第四組加上
1,刪除文件每行的第一個字符:sed -r ‘s/^.//g’ passwd
2,刪除文件每行的第二個字符:sed -r ‘s/^(.)(.)/\2/g’ passwd
3,刪除文件每行的最后一個字符:sed -r ‘s/(.)$//g’
4,刪除文件每行的倒數第二個字符: sed -r ‘s/(.)(.)$/\2/g’ passwd
5,刪除文件每行的第二個單詞:sed -r ‘s/^([a-Z])([^0-9][^a-Z])(a-Z)/\1\2/g’ passwd
原創文章,作者:linux-qiao,如若轉載,請注明出處:http://www.www58058.com/83205