Linux運維學習歷程-第七天-Linux文本工具及正則表達式

文本處理工具:

Linux文本處理三劍客:

  grep、egrep、fgrep:文本過濾工具(模式:pattern)工具

     grep:基本正則表達式 -E -F

     egrep:擴展正則表達式 -G -F

     fgrep:不支持正則表達式 -E -G 僅僅進行字符匹配,沒有模式只有文本,推薦使用速度快

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

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

  正則表達式:Regual Expression,REGEXP

      有一類特殊字符及文本字符所編寫的模式,其中有些字符不表示其字面意義,而是用于表示控制或通配的功能

    分兩類:

       基本正則表達式:BRE

       擴展正則表達式:ERE

       元字符:不能夠被切割,表示控制和通配的功能

grep:Global search REgular expression and Print out the line.

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

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

  正則表達式引擎

  

grep:

  grep [OPTIONS] PATTERN [FILE…]

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

      OPTIONS:

        –color=auto:對匹配到的文本著色后高亮顯示

        -i:ignore-case:忽略字符的大小寫

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

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

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

        -q,–quiet,–silent:靜默模式,既不輸出任何信息(匹配到就匹配返回值0,沒匹配到就不匹配返回值1)

        -A#:after,后#行

        -B#:before,前#行

        -C#:context,前后各#行

  基本正則表達式元字符:

      字符匹配:

        .:匹配任意單個字符

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

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

        以上[]當中的范圍有以下幾種表示方法:

        [:digit:]:表示所有數字

        [:lower:]:表示所有小寫字母  

        [:upper:]:表示所有大寫字母

        [:alpha:]:表示所有大小寫字母

        [:alnum:]:表示所有字母和數字

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

        [:space:]:表示所有的空白字符

        [:graph:]:匹配打印字符。[[:graph:]] 等效于 [[:alnum:][:punct:]]。

        [:cntrl:]:匹配順序值小于32或字符值為127的ASCII字符(控制字符)??刂谱址〒Q行符、換頁符、退格符,等等。

        [:xdigit:]:匹配字符類[0-9A-Fa-f]中的字符

        [:print:]:匹配打印字符和空格。[[:print:]]等效于[[:graph:][:space:]]

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

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

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

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

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

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

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

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

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

       

       位置錨定:

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

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

          ^PATTERN$:用于PATTERN來匹配整行

              ^$:空行;不包括空白字符的行

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

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

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

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

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

      練習:

          1、顯示/etc/passwd文件中不以/bin/bash結尾的行;

          group -v "/bin/bash$" /etc/passwd

          2、找出/etc/passwd文件中兩位或三位數;

          group "\<[0-9]\{2,3\}\>" /etc/passwd

          3、找出/etc/rc.d/rc.sysinit或/etc/grub2.cfg文件中,以至少一個空白字符開頭,且后面非空白字符的行

          group "^[[:space:]]\+[^[space]]" /etc/grub2.cfg

          4、找出"netstat-tan"命令的結果中以'LISTEN'后面跟0、1或多個空白字符結尾的行

          netstat -tan |grep "LISTEN[[:space:]]*$"

       

       分組及引用:

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

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

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

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

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

              …

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

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

               egrep [OPTIONS] PATTERN [FILE…]

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

               選項:

                  OPTIONS:

                  –color=auto:對匹配到的文本著色后高亮顯示

                  -i:ignore-case:忽略字符的大小寫

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

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

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

                  -q,–quiet,–silent:靜默模式,既不輸出任何信息(匹配到就匹配返回值0,沒匹配到就不匹配返回值1)

                  -A#:after,后#行

                  -B#:before,前#行

                  -C#:context,前后各#行

      擴展正則表達式元字符:

      字符匹配:

        .:匹配任意單個字符

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

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

        以上[]當中的范圍有以下幾種表示方法:

        [:digit:]:表示所有數字

        [:lower:]:表示所有小寫字母  

        [:upper:]:表示所有大寫字母

        [:alpha:]:表示所有大小寫字母

        [:alnum:]:表示所有字母和數字

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

        [:space:]:表示所有的空白字符

        [:graph:]:匹配打印字符。[[:graph:]] 等效于 [[:alnum:][:punct:]]。

        [:cntrl:]:匹配順序值小于32或字符值為127的ASCII字符(控制字符)??刂谱址〒Q行符、換頁符、退格符,等等。

        [:xdigit:]:匹配字符類[0-9A-Fa-f]中的字符

        [:print:]:匹配打印字符和空格。[[:print:]]等效于[[:graph:][:space:]]

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

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

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

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

       {m}:匹配其前面的字符m次

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

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

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

       

          分組及引用:

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

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

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

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

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

              …

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

        或

          a|b:a或者b;

             C|cat:C或cat

             (C|c)at:Cat或cat

    練習:

       1、找出/proc/meminfo文件中,所有以大寫或小寫s開頭的行;至少有三種實現方式;

          grep -i "^s" /proc/memsinfo

          grep "^[Ss]"  /proc/memsinfo

          egrep "^(S|s)" /proc/memsinfo

      

       2、顯示當前系統上root、centos或user1用戶的相關信息;

          egrep "^(root|centos|user1)\>" /etc/passwd

      

       3、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一個小括號的行

       egrep -o "[_[:alnum:]]+\(\)" /etc/rc.d/init.d/functions

       

       4、使用echo命令輸出一個絕對路徑,使用egrep取出基名;

       echo "/tmp/dir"|egrep -o "[^/]+/?$"

       echo "/tmp/dir"|grep -o "[^/]\+\/\?$"

       進一步:取出其路徑;類似于對其執行dirname命令的結果

       5、找出ifconfig命令結果中的1-255之間的數值;

         ifconfig|egrep -o "\<[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\>"

       

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

       egrep "^(bash|testbash|basher|nologin):.*\1$" /etc/passwd

       egrep "^(bash|testbash|basher|nologin)\b.*\1$" /etc/passwd

       egrep "^([^:]+\>).*\1$" /etc/passwd

       fgrep:不支持正則表達式元字符

             當無需要用到元字符去編寫模式時,使用fgrep必能更好;

文本查看及處理工具:wc、cut、sort、uniq、diff、patch

    wc:word count顯示每個文件的換行符、 字和字節計數

       wc [OPTION]… [FILE]…

       wc [OPTION]… –files0-from=F

   顯示數據含義:

       行數 單詞數  字節數

            -l:僅lines行數

            -w:僅works單詞數

            -c:僅bytes字節數

    

    cut:從文件的每一行中刪除節

       cut OPTION… [FILE]…

                       -dCHAR:以指定的字符為分隔符,默認為空白字符例如-d:、-d|

                       -fFIELDS:挑選出的字符

                           #:顯示第#行

                           #-#:顯示#到#行

                           #,#:顯示#和#行

    

    sort:按行排序

        sort [OPTION]… [FILE]…

        sort [OPTION]… –files0-from=F

               -n:基于數值大小而非字符進行排序

               -t CHAR:指定分隔符

               -k#:用于排序比較的字段

               -r:逆序排序

               -f:忽略字符大小寫

               -u:重復的行只保留一份(重復:連續且相同)

   

    uniq:報告或忽略重復的行

          uniq [OPTION]… [INPUT [OUTPUT]]

                 -c:統計每行重復的次數

                 -u:僅顯示未重復的行

                 -d:僅顯示重復過的行

    diff:逐行比較文件(生成補?。?/p>

         diff [OPTION]… FILES

                -u:使用unfied機制,即顯示要修改的行的上下文,默認為3行

          diff /PATH/TO/OLDFILE /PATH/TONEWFILE >/PATH/TO/PATCH_FILE

          例如 :diff file file.new > file.patch

   

    patch:補丁更改應用的文件(向文件打補丁)

          patch [-blNR][ -c| -e| -n][-d dir][-D define][-i patchfile][-o outfile][-p num][-r rejectfile][file]

          patch [OPTIAONS] -i  /PATH/TO/PATCH_FILE /PATH/TO/OLDFILE

          patch /PATH/TO/OLDFILE < /PATH/TO/PATCH_FILE

          安裝patch:yum install patch

           -i:打補丁

          patch -i file.patch file

           -R:還原補丁

          patch -R -i file.patch file

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

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

相關推薦

  • Varnish基礎進階

    Varnish基礎進階 前言 互聯網早已惠及全人類, 我們可以通過網絡與家人、朋友進行實時通信, 也能通過網絡隨時隨地在各大電商站點上購物, 我們訪問web站點的速度也越來越快, 這背后都是有很多精巧的架構以及各種先進的技術來支撐的, 我們就今天主要聊聊Web的緩存技術, 對于當今的互聯網來說, Cahe Is King, 緩存真的有那么神奇么? 就由我來帶…

    Linux干貨 2016-04-19
  • keepalived高可用haproxy配合varnish實現wordpress的動靜分離

    haproxy和nginx都可以作為七層和四層反代服務器對外提供服務,此文通過haproxy和keealived配置varnish搭建wordpress的動靜分離站點 一、實驗環境 五臺虛擬機: haproxy-1:搭建haproxy和keepalived服務,ip地址:192.168.11.176 haproxy-2:搭建haproxy和keepalive…

    2017-07-03
  • 磁盤管理之分區管理

                     磁盤管理之分區管理  磁盤一般指的是計算的硬盤,它是計算機五大部件之一,主要用來存儲數據。所有它是計算機不可或缺的部件之一。 常見的硬盤分為固態和…

    Linux干貨 2016-09-06
  • TCP詳解

    TCP協議詳解   TCP/IP協議不是TCP和IP這兩個協議的合稱,而是指因特網整個使用TCP/IP協議的協議集合。他取代了OSI七層模型,成為事實上的應用于實際的模型。 TCP/IP協議與OSI協議的關系如下:   各層的作用如下: TCP特性: 工作在傳輸層面向連接協議 全雙工協議 半關閉 錯誤檢查 將數據打包成段,排序 確認機制 …

    2017-09-02
  • yum安裝 源碼安裝實例

     yum安裝 源碼安裝實例 §·源碼安裝 http 2.2.29實例 1     1.下載源碼包。 1     2.配置系統需要的編譯環境。 2     3 ./configure ; make  ;…

    Linux干貨 2016-08-24
  • 第五周作業

    1、顯示當前系統上root、fedora或user1用戶的默認shell; 答:#egrp ‘^(root|fedora|user1)’ /etc/passwd | cut -f1,7 -d: 2、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一組小括號的行,形如:hello(); 答:#egrp -o &…

    Linux干貨 2017-02-25
欧美性久久久久