Linux基礎知識之文本查找和正則表達式擴展正則表達式

1.什么是正則表達式?

     正則表達式就是處理字符串的方法,它是以行為單位來進行字符串的處理行為,正則表達式通過一些特殊符號的復制,讓用戶可以輕易達到查找、刪除、替換某些特定字符串的處理程序。

     正則表達式基本上是一種“表示法”,只要工具程序支持這種表示法,那么該工作程序就可以用來作為正則表達式的字符串處理之用。支持正則表達式的工具一般有grep、sed、awk、vi/vim等工具。

 2.正則表達式和通配符有什么區別?

     通配符代表的是bash操接口的一個功能,通配符多用在文件名上,比如查找find,ls,cp等。

     正則表達式則是一種字符串處理的表示方式,正則表達式用在文本過濾工具里,比如grep,awk,sed等。

 3.正則表達式的分類?

     正則表達式的字符串按照表示方式依照不同的嚴謹度而分為基礎正則表達式和擴展正則表達式。

 4.使用正則表達式需要特別注意的點?

     使用正則表達式時,需要特別留意當時環境的語系為何,否則可能會發現結果可能和別人的不相同。echo $LANG:查看所處環境的語系。

     grep在數據中查找一個字符串時,是以整行為單位來進行數據的選取。

 5.基本正則表達式符號代表的含義:

     特殊符號      代表的含義

[:alnum:]       所有的數字和字母,0-9,a-z,A-Z

[:alpha:]       所有的字母,a-z,A-Z

[:space:]       所有的空白字符,空格和TAB

[:digit:]       所有的數字,0-9

[:punct:]       所有的標點符號

[:lower:]       所有的小寫字母,a-z

[:upper:]       所有的大寫字母,A-Z

 6.grep命令的基本用法:

      grep:根據模式,搜索文本,并將符合模式的文本行顯示出來。

      Pattern:由文本字符和正則表達式的元字符組合而成匹配條件

      grep [OPTIONS] PATTERN [FILE…]

          -i:表示忽略大小寫

          –color:把查找到的字符,用顏色標識出來

          -v:反向查找,顯示沒有被模式匹配到的行,匹配到的不顯示

          -o:只顯示被模式匹配到的字符串

          -E: 使用擴展正則表達式

          -A #:顯示查找的文件的后#行,用–分開

          -B #:顯示查找的文件的前#行,用–分開

          -C #:顯示查找文件的前后各#行,用–分開

 7.正則表達式:Regular EXPression :REGEXP

      元字符:默認方式工作在貪婪模式下

          .:表示匹配任意長度的任意字符

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

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

          ^[^]:^在[]的內外是由區別的,[^]表示的是反向選擇,^[]表示定位在行首的含義。

      字符的匹配次數(貪婪模式):盡可能長的去匹配,有部分匹配也行

          *:匹配其前面的字符任意次

            eg:a,b,ab,aab,acb,adb,amnb

            a*b:可以匹配的是:b,ab,aab(a出現任意次后面跟個b)

            a.*b:可以匹配的是:ab,aab,acb,adb,amnb(a開頭b結束的任意長度的任意字符)

            a\?b:b,ab(上面是全部符合的,剩下的有一部分是符合的)

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

            \?:匹配其前面的字符1次或0次

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

            a\{1,3\}b:可以匹配:ab,aab,只能匹配兩個條件都符合的

            a.\{1,3\}b:可以匹配:aab,acb,adb,amnb(a和b中間的可以是一個兩個或者三個)

         位置錨定

            ^:錨定行首(此字符后面的任意字符段必須出現在行首)

             eg: grep '^root' /etc/passwd

                 表示在下面查找的內容中,root必須是在行首出現

            $:錨定行尾(此字符前面的任意字符段必須出現在行尾)

             eg: grep 'root$' /etc/passwd

                 表示在下面查找的內容中,root必須是在行尾出現

            ^$:空白行

            \<或\b:錨定行首,其后面的任意字符必須作為單詞首部出現

            \>或\b:錨定行尾,其后面的任意字符必須作為單詞尾部出現

            \<root\>:整個的單詞出現

          分組:

         \(\)

               \(ab\)*:ab可以出現一次兩次,任意次,修飾的是ab這個整體

          后向引用

              \1:引用第一個左括號以及與之對應的右括號所包括的所有內容

              \(l..e\).*\1:后面查找的內容,必須和前面的內容一樣

     擴展的正則表達式:工作在貪婪模式中

     擴展正則表達式的花括號不用使用反斜線

         字符匹配:

              ?:任意單個字符

              []:指定范圍內的單個字符

              [^]:指定范圍外的單個字符

         次數匹配:

              *:匹配其前面的字符任意次

              ?: 匹配其前面的字符1次或0次

              +:匹配其前字符至少1次

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

         分組:不需要加反斜線

              ():分組,真正的實現分組

              \1,\2,\3,…

         或者:  |   or

              a|b:ab有一個就行啊

              C|cat:只匹配單純的C|cat。

          grep -E=egrep 用于擴展正則表達式的grep

          錨定的數字,必須是單個的字符出現,小數點不會被識別

 查找文件的基本演示:

     a.正則表達式:

     1.查找特定的字符串:(使用-n選項,默認顯示查找到的行的行號)

          正向查找grep -n 'root' /etc/passwd

         blob.png

          反向查找grep -vn 'root' /etc/passwd  (除了含有root的兩個沒匹配,其余都匹配)

         blob.png

          查找的字符不區分大小寫 grep -in 'Root' /etc/passwd

         blob.png

     2.查找以特定字符開頭的字符串:

          grep -n '^root' /etc/passwd :查找以root開頭的字符串

         blob.png

     3.利用[]來查找集合字符

          grep -n 'r[oa]ot' /etc/passwd :[]中無論幾個字符,都是代表一個字符,相當于查詢root raot

         blob.png

     4.利用[]來查找連續字符的內容

          grep ':[0-9]:' /etc/passwd : []中出現的范圍的單個字符

         blob.png

     5.利用[^]來過來我們不想查找的內容

          grep -n 'r[^o]ot' /etc/passwd :[^]不會去查找[^]中的內容

         blob.png

     6.利用特殊符號來查找內容

          grep -n '^[^[:lower:]].' /etc/passwd :查找/etc/passwd 下面以非小寫字母開頭的字符

         blob.png

          grep -n '^[[:digit:]].' /etc/passwd :查找/etc/passwd 下面以數字開頭的字符

         blob.png

     7.查找以特定字符結尾的字符串

          grep -n 'bash$' /etc/passwd :查找以bash結尾的字符串

         blob.png

     8.表示任意一個字符 .(表示一定有一個任意字符的意思)

          grep -n 'r..t' /etc/passwd :表示查找到的字符中是以r開頭以t結尾,中間含有兩個字符,但不指定中間這兩個字符是什么

         blob.png

     9.表示重復字符*(表示*前面的字符可以重復0次到無窮次)

          grep -n 'ooo*' /etc/passwd :表示查找到的字符中最少含有oo,可以含有2-n個o字符

         blob.png

     10.表示以特定字符開頭以特定字符結尾,中間含有任意個字符,為.*

          grep -n 'r.*t' /etc/passwd :表示r和o中間可以有很多個字符,不限定是什么

         blob.png

     11.表示限定連續多個字符范圍 {}  (使用中{}需要轉義為\{\})

          grep -n 'o\{2\}' /etc/passwd :表示查找的字符中含有僅含有兩個o

         blob.png

          grep -n 'o\{1,3\}' /etc/passwd :表示查找的字符中含有1-3個o

         blob.png

      需要轉義符特殊制定的符號:

          .–>\.   {}–>\{\}

     b.擴展正則表達式:需使用grep -E 或者egrep 跟后面的正則表達式

     1.表示查找一個以上的字符 +

          egrep 'ro+t' /etc/passwd :查找文件中以ro+t的字符,o出現一次或者n次

         blob.png

     2.表示前面出現零個或者一個前面的字符

          egrep 'roo?t' /etc/passwd :查找文件中以roo?t的字符,第二個o出現一次或者零次 查找的結果為 rot root 

         blob.png

     3.表示用或的方式找出數個字符串

          egrep 'raot|root|rot' /etc/passwd :查找文件中的raot|root|rot字符

         blob.png

     4.查找“組”字符串

          egrep 'r(a|o)ot' /etc/passwd :查找文件中root或raot 字符

         blob.png

     5.查找多個重復組的判別 ()+

          egrep 'r(ao)+t' /etc/passwd :查找文件中含有多個ao的字符

         blob.png

原創文章,作者:sjsir,如若轉載,請注明出處:http://www.www58058.com/31290

(0)
sjsirsjsir
上一篇 2016-08-10 10:27
下一篇 2016-08-10 10:28

相關推薦

  • Linux下的文件管理系統

    一、文件系統的FHS標準     因為Linux的屬于開源系統,開發人員多,為了統一開發標準,Linux有一個文件系統標準,也就是FHS(Filesystem HierarchyStandard)標準。有了這個標準,那些獨立的軟件開發商、系統開發人員以及系統的使用者就能方便的在系統上操作。 二、文件系統  &…

    Linux干貨 2016-08-02
  • 倒排索引-搜索引擎的基石

    1.概述       在關系數據庫系統里,索引是檢索數據最有效率的方式,。但對于搜索引起,他它并不能滿足其特殊要求:       1)海量數據:搜索引擎面對的是海量數據,像Google,百度這樣大型的商業搜索引擎索引都是億級甚至幾千的網頁數量 ,面對…

    Linux干貨 2015-12-10
  • N25 – Week 4 blog

    第四周博客作業了,感覺前面的有好多都忘掉了,但是沒有時間補以前的啊……好郁悶,幸好今天周五,明天又是圣誕節,從馬云爸爸買了一顆圣誕樹,今晚回家裝上 1. 復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒有任何訪問權限 [root@dhcp-10-129-6-166&nb…

    Linux干貨 2016-12-20
  • Linux基于PXE實現系統全自動無人值守安裝

    前言 在生產環境中,我們時常會需要在多臺客戶端主機或服務器安裝操作系統,如果每一臺都去手動安裝,費時費力,顯然是不現實的。那么,如何高效的完成此類工作呢?文將講解如何實現Linux系統的全自動無人值守安裝。 提供PXE服務所需安裝包 dhcp:動態主機配置協議,給客戶端提供ip地址 tftp-server:tftp服務器端,提供系統安裝所需文件 xinetd…

    Linux干貨 2015-04-01
  • 馬哥教育N22期第六周作業

    關于vim編輯器使用方法整理 編輯器分為文本編輯器、全屏編輯器、模式化編輯器 vim是最常用的編輯器之一,是vi的增強版 基本模式分為編輯模式、命令模式、輸入模式、末行模式 下面我們介紹一下vim編輯器常用方法: 打開文件 vim +#:打開文件后,直接光標處于第#行行首 +/PATTERN:打開文件后,直接讓光標處于第一個被PATTERN匹配 +…

    Linux干貨 2016-10-09
  • 馬哥教育網絡版22期+第10周作業

    week10 1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;   (1) 為硬盤新建兩個主分區;并為其安裝grub;   (2) 為硬盤的第一個主分區提供內核和ramdisk文件;&nbsp…

    Linux干貨 2016-10-29
欧美性久久久久