grep文本查找和正則表達式

一、grep

grep: Global search REgular expression and Print outthe line)全局查找正則表達式并且打印結果行。不會對輸入的文本進行修改。

Unix的grep家族包括grep、egrep和fgrep,egrep是grep的擴展,支持更多的正則元字符; fgrep就是fixed grep或fast grep,它們把所有的字母都看作單詞,也就是說,正則表達式中的元字符表示回其自身的字面意義,不再特殊。

用法:grep [OPTIONS] PATTERN [FILE]

          grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]

常用options:

      –color=auto:對匹配到的行高亮顯示。

             在centos6系列中可以以別名的形式將其寫入~/,bashrc,以簡化命令;centos7默認寫入。

      -i(ignorecase):忽略字符的大小寫

-o:僅顯示匹配到的字符串本身

-v:顯示不能被模式匹配到的行

-n:顯示滿足條件的行的行號

-c:統計滿足條件的行數

-e:或者    grep -e root -e bash /etc/passwd

-w: 匹配的模式被當作整個單詞

-E:使用擴展到正則表達式元字符;等同于egrep

-F:支持fgrep

-q(–quiet):靜默模式,不輸出任何信息

-A #:after,顯示匹配到的行及其后#行;默認顯示后兩行

-B #:before,顯示匹配到的行及其前#行;默認顯示前兩行

-C #:context,顯示匹配到的行及其前后各#行;默認顯示前后兩行     

 

egrep:支持擴展的正則表達式,實現類似grep文本過濾功能。等同于grep –E

fgrep:不支持正則表達式,當無需使用到元字符去編寫模式時,使用fgrep性能更好。

 

正則表達式(REGEXP):由一類特殊字符及文本字符所編寫的模式,用于在查找的過程中匹配指定的字符,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能。

       分兩類:

           基本正則表達式: BRE

           擴展正則表達式: ERE

二、基本正則表達式:

1 字符匹配:

. : 匹配任意單個字符;

[] : 匹配指定范圍內的任意單個字符

[^] :匹配指定范圍外的任意單個字符

[:digit:]:數字

[:lower:] :小寫字母

[:upper:] :大寫字母

[:alpha:] :所有字母(包含大小寫)

[:alnum:] :包含所有字母和數字

[:punct:] :特殊符號

[:space:] :空格

       2 次數匹配:用在要指定次數的字符后面,用于指定前面的字符要出現的次數

             * :匹配前面的字符任意次(0、1或多次)

.* :任意長度的任意字符

\?:匹配其前面的字符0或1次,即其前面的字符是可有可無的

\+:匹配其前面的字符至少1次,即其前面的字符要出現至少1次     

\{n\}:匹配前面的字符n次

\{m,n\}:匹配前面的字符至少m次,至多n次

\{,n\}:匹配前面的字符至多n次

\{n,\}:匹配前面的字符至少n次

       3 位置錨定:

       3.1、行錨定

              ^:行首錨定,用于模式的最左側

  $:行尾錨定,用于模式的最右側

      ^PATTERN$: 用于模式匹配整行

^$: 空行

^[[:space:]]*$ :空白行

       3.2、字符錨定

     \< 或 \b:詞首錨定,用于單詞模式的左側

     \> 或 \b:詞尾錨定;用于單詞模式的右側

     \<PATTERN\>:匹配整個單詞

       4分組:

       分組: \(\):將一個或多個字符捆綁在一起,當作一個整體進行處理,如: \(root\)\+

 引用:分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3, …

 后向引用:引用前面的分組括號中的模式所匹配字符(而非模式本身)

\1 :模式從左側起,第一個坐括號以及與之匹配的右括號之間的模式所匹配的字符

\2 :模式從左側起,第二個坐括號以及與之匹配的右括號之間的模式所匹配的字符

\3 :模式從左側起,第三個坐括號以及與之匹配的右括號之間的模式所匹配的字符

……n:模式從左側起,第n個坐括號以及與之匹配的右括號之間的模式所匹配的字符

實例: \(string1\+\(string2\)*\)

\1: string1\+\(string2\)*

\2: string2

例1:顯示/proc/meminfo文件中以大小s開頭的行; (要求:使用兩種方式)

blob.png

例2:添加用戶bash、 testbash、 basher以及nologin(其shell為/sbin/nologin),
而后找出/etc/passwd文件中用戶名同shell名的行

blob.png

例3:顯示/etc/grub2.cfg文件中,至少以一個空白字符開頭的且后面存非空白字符的行

blob.png

三、擴展正則表達式

       1、字符匹配:

. :任意單個字符

[] :指定范圍的字符

[^] :不在指定范圍的字符

       2、次數匹配:注意格式同基本正則表達式的區別

            *:匹配前面字符任意次

? : 0或1次

+: 1次或多次

{m}:匹配m次

{m,n}:至少m,至多n次

       3、位置錨定

       3.1、行錨定

            ^ :行首

$ :行尾

       3.2、字符錨定

\<, \b :詞首

\>, \b :詞尾

       4、分組:注意同基本正則表達式格式上的區別

              ()

后向引用: \1, \2

例: \(xy\)*ab

       5、或

             a|b

 C|cat: C或cat

 (C|c)at:Cat或cat

例1:找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)后面跟一個小括號的行

blob.png

例2:統計以root身份登錄的每個遠程主機IP地址的登錄次數

blob.png

還有另一種寫法,要簡單些。不過上一種寫法能精確匹配ip地址,也應熟練掌握

blob.png

原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/29889

(0)
M20-1鐘明波M20-1鐘明波
上一篇 2016-08-07
下一篇 2016-08-07

相關推薦

  • linux學習筆記: grep命令,正則表達式

    linux學習筆記:grep命令,正則表達式 linux運維筆記 簡介 grep命令是一個最初用于Unix操作系統的命令行工具,在給出文件列表或者標準輸入之后,grep會對匹配一個或者多個正則表達式的文本進行搜索,并且只輸出匹配或者不匹配的行或者文本。(參見維基百科)  正則表達式是計算機科學的一個概念,正則表達式使用單個字符串…

    Linux干貨 2017-04-07
  • 高效運維最佳實踐(03):Redis集群技術及Codis實踐

    前言 誠如開篇文章所言,高效運維包括管理的專業化和技術的專業化。前兩篇我們主要在說些管理相關的內容,本篇說一下技術專業化。希望讀者朋友們能適應這個轉換,謝謝。 互聯網早在幾年前就已進入Web 2.0時代,對后臺支撐能力的要求,提高了幾十倍甚至幾百倍。在這個演化過程中,緩存系統扮演了舉足輕重的角色。 運維進化到今天,已經不是重復造輪子的時代。所以,我們在架構優…

    Linux干貨 2015-04-03
  • Linux中的軟鏈接/硬鏈接

    Linux鏈接概念Linux鏈接分兩種,一種被稱為硬鏈接(Hard Link),另一種被稱為符號鏈接(Symbolic Link)。默認情況下,ln命令產生硬鏈接。 【硬連接】硬連接指通過索引節點來進行連接。在Linux的文件系統中,保存在磁盤分區中的文件不管是什么類型都給它分配一個編號,稱為索引節點號(Inode Index)。在Linux中,多個文件名指…

    Linux干貨 2016-10-20
  • Linux的發展史和Linux的終端類型

    Linux的發展史和Linux的終端類型 前言:    隨著時代的發展,Linux所占的市場份額越來越大,目前幾乎百分之九十的服務器市場都被Linux占據。接下來我們來聊聊Linux的發展史。 簡單的說:Linux操作系統是1998年的8月芬蘭的一個叫Linus Torvalds的大學生寫出來的一個類minix的系統。 具體分析: Lin…

    Linux干貨 2016-10-17
  • 多方面修復linux系統

    在這篇文章,您將看到以下方面的修復方法: ●內核文件和虛擬 ●grub.conf ●grub目錄 ●boot分區 ●fstab文件 ●root密碼破解   首先,要想很愉快的修復linux啟動的各種問題,就必然要把linux的啟動流程搞清楚。 1. 加載 BIOS 的硬件信息和進行自我測試,并依據設定取得第一個可開機的裝置; 2. 讀取并執行第一個…

    Linux干貨 2016-09-13
  • select循環解析

    前言:   select命令用于創建菜單,在select循環執行時會根據list數組給出選擇菜單,用戶選擇后的結果保存在變量中,然后給出菜單,等待用戶選擇。select是個死循環,如果用戶用戶想跳出選擇循環,需要在循環體中根據條件增加break語句。 格式: select variable in list do 循環體命令 done 示例: 在這個…

    Linux干貨 2016-08-24
欧美性久久久久