linux 正则表达式 视频教程,30分钟带你玩转正则表达式
定義:
正則表達式說白了就是有普通字符、以及特殊字符組成的文子模式。{匹配模式標準}
正則表達式將會作為一個模板與所搜索的字符串進行匹配。可以讓使用者輕易達到搜尋/刪除/取代某些特定字符的處理程序。此外vim、grep、find、awk、sed等命令都支持正則表達式
注:在這里希望大家搞明白一件事,那就是通配符和正則表達式的區別與關系:
1、正則表達式是用來匹配字符串的,這個就不解釋了2、通配符是用來通配的,也就是shell在做Pathname Expansion時用到的
那么在什么情況下使用呢?
在什么地方使用通配符?答案是只要是shell命令行或者shell腳本中,你都可以使用通配符
在什么地方使用正則表達式?當你使用能夠支持正則表達式的工具軟件進行字符串處理時你就可以使用正則表達式
一、常用的正則表達式:
1)、. ?代表任意單個字符;如要查看某行中的put,可以使用p.t 文件名與之相互匹配。
2)、^號代表開始;如以T開頭的行進行匹配.
3)、$代表行的結束;如以tty結束的行進行匹配:
4)、[...]匹配括號中的字符之一。但是只要有和方括號內的字符相同將會全部匹配:
如[tty] 匹配包含tty其中之一字符或者全部包括
注:數字或者大小寫字符和上面的都是相同的道理這里不在演示,有興趣大家可以自己進行測試。
5)、[^xx]這個表示把某個字符或者數字排除在外的匹配,類似與取反的操作:
6)、 * 用于修飾前導字符,表示前導字符出現0次或任意多次,*代表所有和前導字符相同的字符。如:
7)、\?同樣用于修飾前導字符,表示前導字符出現0次或者1次
8)、\+修飾前導字符,表示前導字符出現1次或者多次
這三種方式的使用方式基本一樣,但就是前導字符出現的次數有所不同,上面已經標明了次數
9)、\{n,m\}同樣用于修飾前導字符,但是在這里的n和m表示的是出現的次數,而不是個數,希望大家千萬不要混淆。比如匹配連續2到4個a
注意了:在這里換可以使用其他的兩種方式進行顯示結果:
方式一:
方式二:
這里使用的三種方式進行顯示,但是呢,都是進行了轉譯之后才可以的到想要的結果。egrep就屬于轉譯,另外grep -E也是轉譯,最后a\{2,4\}也是轉譯,不管使用那種方式,都可以得到想要的結果,
\用于轉義緊跟其后的單個特殊字符,使該特殊字符成為普通字符
在這里這個不做深入的研究。
另外還有其他的幾種形式:
\{n\} 連續的n個前導字符
\{n,\} 連續的至少n個前導字符
不知道上面的大家伙有沒有看明白,如果要是沒有看明白的話這里將會為大家繼續講解一個綜合的例子希望大家可以看的更加明白一些:
Christian Scott lives here and will put on a Christmas party.
There are around 30 to 35 people invited.
They are:
Tom
Dan
Rhonda Savage
Nicky and Kimerly.
Steve, Suzanne, Ginger and Larry.
搜索行以A至Z的一個字母開頭,然后跟兩個任意字母,然后跟一個換行符的行。將找到第5行。
搜索以一個大寫字母開頭,后跟0個或多個小寫字母,再跟數字3,再跟0—5之間的一個數字。
搜索以0個或多個空格開頭,跟一個大寫字母,兩個小寫字母和一個換車符
將查找以0個或多個大寫或小寫字母開頭,不跟逗號,然后跟0個或多個大寫或小寫字母,然后跟一個換車符。
二、grep命令的用法:
相信大家之前多多少少之前對grep都有過了解和使用,比如截取,再或者結合管道符、重定向符號進行使用,那么今天就讓大家對grep有一個更深如層次的了解;
grep(全面搜索正則表達式并把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來.
大家可以通過grep --help幫助來查看關于grep的更多參數命令,在這里就為大家介紹其中常用的幾種:
-A NUM,--after-context=NUM除了列出符合行之外,并且列出后NUM行。
-B NUM,--before-context=NUM與-A NUM相對,但這此參數是顯示除符合行之外并顯示在它之前的NUM行
-C [NUM], -NUM, --context[=NUM]列出符合行之外并列出上下各NUM行,默認值是2
-i,--ignore-case忽略大小寫差別
-n,--line-number在匹配的行前面打印行號
-v,--revert-match反檢索,只顯示不匹配的行
要用好grep這個工具,其實就是要寫好正則表達式,所以這里不對grep的所有功能進行實例講解,只列幾個例子,講解一個正則表達式的寫法。
$ ls -l | grep ?'^d'通過管道過濾ls -l輸出的內容,只顯示以d開頭的行。
$grep ?'\.$' ?filename
顯示以.為結尾的所有行。
總結grep:
這幾個參數不在進行演示了相信大家已經明白了grep的基本用法了,但是grep的參數選項可不止這一點點,如果想要掌握更多的參數,就要學會查看幫助--help再或者查看man手冊
三、sed的用法:
sed是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。
注意:雖然sed把處理的內容發送到了屏幕之上,但是文件本身的內容卻并沒有改變,如果要想改變最簡單的方法就是使用參數【-i】即可。另外也可以重定向到其他文件之下。
sed的基本命令:
1)、替換:s命令
這是最為常用的命令
比如:
為啥有一個people沒有被替換掉呢?
那是因為sed 's/people/aaaaa/g'test.text沒有加g
2)用&表示匹配的字符串
有時可能會想在匹配到的字符串周圍或附近加上一些字符.如:sed 's/abc/(abc)/'filename
該例子在找到的abc前后加上括號.該例子還可以寫成sed 's/abc/(&)/'filename
下面是更復雜的例子:
取得eno16777736網卡IP地址:
3)、刪除行:d命令
從某個文件當中刪除包含關鍵字符的所有行:
將/etc/passwd的內容顯示并找印行號,同時將2~5刪除
不知道大家對正則表達式有沒有認識和了解,今天就為大家帶來這些,另外這些東西是看不會的,要多實操才可以幫助大家加深印象和理解的。如果有什么地方需要和本人交流請留言。
總結
以上是生活随笔為你收集整理的linux 正则表达式 视频教程,30分钟带你玩转正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab中select,[转载]MA
- 下一篇: 神仙打架?苹果短暂撤销 Facebook