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 22:07
下一篇 2016-08-07 22:07

相關推薦

  • bash腳本編程基礎知識

    shell腳本語言編程之bash shell簡介 什么是shell:     shell是Linux的用戶界面,提供了用戶與內核進行交互的接口,他接收了用戶的指令,并將指令送入內核去執行     shell即是一種高級程序語言,也是一種命令解析語言   &nb…

    Linux干貨 2016-08-15
  • 步入LINUX

    初次融入LINUX的環境。。。

    Linux干貨 2018-03-26
  • 文本全屏編輯器 vim

             vim在Linux中站著很重要的位置,是每一個學習Linux人員的必須掌握的技能之一,因為vim功能很強大為我們編輯文件和腳本帶來了很大的方便。接下來我們來一起了解vim的功能。   文本編輯種類:     行編…

    Linux干貨 2016-08-15
  • puppet部署多臺服務器

    利用puppet實現自動化部署 配置前準備:   圖中:藍線表示各個服務器之間通信      紅線表示puppetmaster主機向各個agent主機部署信道 A主機puppet-master主機:192.168.126.129 B主機做兩種服務:keepalived高性能和nginx反代  &nb…

    2017-07-23
  • LVM應用

    1、創建一個2G的文件系統,塊大小為2048byte,預留1%可用空間,文件系統ext4,卷標為TEST,要求此分區開機后自動掛載至/test目錄,且默認有acl掛載選項 ·首先在虛擬機當中添加指定大小的硬盤,添加完成后,系統不會自動掃描添加的硬盤設備,鍵入命令重新掃描SCSI總線來添加設備   echo "- – -&quo…

    Linux干貨 2016-08-30
  • N26-第二周

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。(盜圖了,哈哈哈) 文件查看類命令:cat, tac, head, tail, more, less,touch    cat 查看文件內容   tac命令   反向查看文件內容  注:可對照上圖 分屏查看命令:more  …

    Linux干貨 2017-01-07
欧美性久久久久