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:補丁更改應用的文件(向文件打補?。?/p>

          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
下一篇 2016-08-10

相關推薦

  • C語言的謎題

    這幾天,本站推出了幾篇關于C語言的很多文章如下所示: 語言的歧義 [酷殼鏈接] [CSDN鏈接] 誰說C語言很簡單? [酷殼鏈接] [CSDN鏈接] 6個變態的C語言Hello World程序 [酷殼鏈接] [CSDN鏈接] 如何加密/弄亂C源代碼 [酷殼鏈接] [CSDN鏈接] C語言的謎題 [酷殼鏈接] …

    Linux干貨 2016-05-08
  • grep命令

    ]# chmod -R 700 /home/tuser1 ]# ll /home/tuser1/ total 0 drwx——. 2 root root 72 Nov 20 17:33 skel 新增用戶與組: 顯示/proc/meminfo: 顯示shell 非 /sbin/nologin 的用戶 找出/etc/passwd文件中一…

    Linux干貨 2016-11-20
  • vim簡單操作

    vim第一講 光標在屏幕文本中的移動既可以用箭頭鍵,也可以使用 hjkl 字母鍵。 h (左移) j (下行) k (上行) l (右移) 欲進入 Vim 編輯器(從命令行提示符),請輸入:vim 文件名 <回車> 欲退出 Vim 編輯器,請輸入 <ESC> :q! <回車> 放棄所有改動。 或者輸入 <ESC&gt…

    Linux干貨 2017-07-29
  • MAN手冊、Linux文件系統等介紹

    適合人群:Linux初學者 主要內容: Man手冊使用介紹        FHS文件系統介紹        Linux文件類型介紹        隨堂筆記 操作環境:CentOs 6.8 ☆ MAN 手冊介紹 man手冊…

    Linux干貨 2016-10-18
  • 編譯安裝httpd

    編譯安裝httpd   1 去官網下載源碼包                                      為避免非法軟件,一定要去官網下載http…

    2017-04-24
  • CentOS 系統啟動流程

    CentOS 系統啟動流程 一、Linux系統的組成部分:內核+根文件系統 1.內核: 進程管理:進程之間的通信為:IPC(Inter Process Communication)機制,有消息隊列、semerphor、shm、socket(跨主機之間的通信) 內存管理; 網絡管理; 文件系統; 驅動程序; 安全功能; 2.運行中的系統環境可分為兩層:內核空間…

    Linux干貨 2016-09-13
欧美性久久久久