文本處理三劍客之-grep


文本處理工具:

Linux上文本處理三劍客:

    grep:文本過濾工具(以模式過濾:pattern)

    sed:stream editor,流編輯器,文本編輯工具

    awk:Linux上的實現爲gawk,文本報告生成器(格式化文本)


正則表達式:regular expression  REGEXP

由一類特殊字符及文本字符所編寫的模式,其中有些字符不表示其字面意義,

而是用於表示控制或通配的功能;


分兩類:

    基本正則表達式:BRE

    擴展正則表達式:ERE

        元字符:\(hello[[:space:]]\+\)\+


grep:global search regular expression and print out the line.

作用:文本搜索工具,根據用戶指定的"模式(過濾文件)"對目標文本逐行進行匹配檢查,打印匹配到的行

模式:由正則表達式的元字符及文本字符所編寫出的過濾條件

正則表達式引擎:



grep [OPTIONS] PATTERN [FILE...]

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


    OPTIONS:

    --color=auto:對匹配到的文本着色後高亮顯示

    -i:ignorecase,忽略字符大小寫

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

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

    -E:支持使用擴展的正則表達式元字符

    -q:--quiet,--silent:靜默模式,即不輸出任何信息

    -A #:after,後 # 行

    -B #:before,前#行

    -C #:context,前後各#行



基本正則表達式元字符:

    字符匹配:

    .:匹配任意單個字符

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

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

    [:digit:]

    [:lower:]

    [:upper:]

    [:alpha:]

    [:alnum:]

    [:punct:]

    [:space:]

    [:digit:]

    匹配次數:用在要指定其出現的次數的字符後面,用於限制其前面字符出現的次數

    默認工作於貪婪模式

    *:匹配其前面字符任意次;0,1,或多次

    例如:grep "x*y"  abxy  aby  xxxxxxy  yab

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

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

    \+:匹配其前面的字符一次或多次;即其前面的字符要出現至少一次

    \{m\}:匹配前面字符m次

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

    \{0,n\}:至多n次

    \{m,\}:至少m次



位置錨定

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

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

    ^PATHERN$:匹配整行

    ^$:空白行

    ^[[:space:]]*$:空白行或包含空白字符的行


單詞:非特殊字符組成的連續字符(字符串)都稱爲單詞;

    \<或\b:錨定詞首,用於單詞的左側

    \>或\b:錨定詞尾,用於單詞的右側

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



分組及引用:

\(xy\)*ab 

\(\):將一個或多個字符捆綁在一起,當做一個整體進行處理


Note:分組括號中的模式匹配到的內容會被正則表達式引擎自動記錄於內部的變量中


這些變量爲:

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

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

\3

...



egrep:支持擴展的正則表達式實現類似於grep文本的過濾功能

# egrep 或者 

# grep -E


擴展正則表達式的元字符:

字符匹配:

    .:任意單個字符

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

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

    次數匹配:

    *:任意次:0,1,或多次;

    ?:0或1次;其前的字符是可有可無的

    +:其前字符至少1次;

    {m}:其前的字符m次

    {m,n}:

    {0,n}:

    {m,}:

位置錨定:

    ^:行首錨定;

    $:行尾錨定;

    \<,\b:詞首錨定

    \>,\b:詞尾錨定

分組及引用:

    ():分組;括號內的模式匹配到的字符會被記錄於正則表達式引擎的內部變量中

    後向引用;\1  \2  \3...

或者

    a|b:a或者b;或者整個左側或右側

    C|cat:C或者cat

    (C|c)at:Cat或者cat


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章