Linux學習總結&day07-正則表達式&文本處理工具

第一部分、正則表達式

    1、什么是正則表達式

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

    正則表達式基本上是一種“表示法”,只要工具程序支持這種表示法,那么該程序就可以用來作為正則表達式的字符串處理之用。例如vi、grep、awk、sed等工具,因為他們有支持正則表達式,所以這些工具就可以使用正則表達式的特殊字符來進行字符串的處理。但例如cp、ls等命令并未支持正則表達式,所以就只能使用bash自身的通配符。

    最后應該注意的是,正則表達式和通配符是完全不一樣的東西,因為通配符是代表的bash接口的一個功能,但是正則表達式是一種字符串處理的表示方式。

   

     2、正則表達式的分類

        REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能
?      程序支持: grep, vim, less,nginx等
?      分兩類:
            基本正則表達式: BRE
            擴展正則表達式: EREgrep -E, egrep
?         正則表達式引擎:采用不同算法,檢查處理正則表達式的軟件模塊PCRE( Perl Compatible Regular Expressions)
?     元字符分類:字符匹配、匹配次數、位置錨定、分組
?     man 7 regex

    3、基本正則表達式的元字符

        a、字符匹配:

            .:匹配任意單個字符

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

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

            2.png

       b、匹配次數:用在要指定其出現的次數的字符的后面,用于限制其前面字符出現的次數,默認工作于貪婪模式,最大匹配。

3.png

        c、位置錨定

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

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

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

            ^$:空白行

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

            單詞位置的錨定,非特殊字符組成的連續字符(字符串)都稱為單詞。

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

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

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

        d、分組及引用:

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

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

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

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

    4、第一大文本處理工具-grep

        grep: Global search REgular expression and Print out the line.
        作用:文本搜索工具,根據用戶指定的“模式”對目標文
        本逐行進行匹配檢查;打印匹配到的行;
        模式:由正則表達式字符及文本字符所編寫的過濾條件

            grep [OPTIONS] PATTERN [FILE…]
            grep root /etc/passwd
            grep "$USER" /etc/passwd

            grep '$USER' /etc/passwd
            grep `whoami` /etc/passwd

            –color=auto: 對匹配到的文本著色顯示;
            -v: 顯示不能夠被pattern匹配到的行;

            -i: 忽略字符大小寫

            -n: 顯示匹配的行號

            -c: 統計匹配的行數

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

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

            -A #: after, 后#行

            -B #: before, 前#行? -C #: context, 前后各#行

            -e:實現多個選項間的邏輯or關系

            grep –e ‘cat ’ -e ‘dog’ file

            -w:整行匹配整個單詞

            -E:使用ERE

        5、grep練習

            例題一、查找特定字符串

                a、使用-n選項表示找到包含特定字符串,并顯示其位于第幾行

1.png

                b、使用-v選項表示找到不包含特定字符串,-n顯示其位于第幾行

2.png

             c、使用-i選項表示找到包含特定字符串不分大小寫,-n并顯示其位于第幾行

3.png

        例題二、利用中括號[]來查找集合字符

            a、如果我們想查找test或者taste這兩個單詞時,可以發現他們有共同的tst的存在。這個時候我們可以這樣做,其實[]里面不論有幾個字符,他只能代表一個字符。

4.png

            b、如果我們不想要oo字符前面的g字符的化,我們可以使用集合字符的反向選擇[^]來完成,注意[^]只是代表匹配到的一個字符。

5.png

            c、查找oo字符前面不是小寫字母

6.png

            d、查找0-9的任意單個字符(工作貪婪模式,最大匹配,因此有下面的3183字符的匹配)

7.png

            e、 我們也可以使用[[:lower:]]和[[:digit:]]來替代上面c和d題的表示方法

8.png

     例題三、行首和行尾的字符錨定^$

            a、錨定行首是某個指定的字符,例如以the開頭的行,或者以小寫字母開頭的行

            9.png

            b、錨定行首不是字母開頭的行

            10.png

            c、錨定行尾以點號結尾的行(注意點號在正則表達式代表任意單個字符,所以此處需要轉義)

            11.png

            

            d、使用行首和行尾可以錨定空白行^$

            12.png

    例題四、任意一個字符.與重復字符*

            a、點號代表匹配到任意的一個字符,而*代表前面的字符出現多次或者0次

            13.png

            b、匹配g開頭或者g結尾的,或者同時g開頭g結尾的字符串(開頭的g可有可無,也可以多次)

            14.png

            c、.*兩個匹配g與g之間有多個字符

            15.png 

    例題五、限定前面的字符出現的次數范圍{}

            a、匹配前面的字符出現兩次(最大匹配)

             16.png  

            b、找到goooooogle字符串的行(至少3個o濾除兩個o的)

            17.png

    例題六、使用分組\(\),和\1兩個結合取出兩個oo之間有其他字符的行

            \1:此變量表示從第一個左括號匹配到的模式   

            18.png

    以上為grep的基本練習,具體詳細的練習見本期博客的作業部分。

第二部分、文本處理工具

    一、文件內容查閱工具

    cat:由第一行開始顯示文件內容

    tac:由最后一行開始顯示,可以看出taccat的倒寫形式

    rev:與cat類似,是cat的水平倒寫的形式

    more:一頁一頁的顯示文件的內容

    less:與more類似,但是比more好的是,它可以往前翻頁

    head:只看頭幾行

    tail:只看結尾的幾行

 

        1、文件查看命令:cat,tac,rev

        cat [OPTION]… [FILE]…

        -E: 顯示行結束符$

        -n: 對顯示出的每一行進行編號

        -A:顯示所有控制符

        -b: 非空行編號

        -s:壓縮連續的空行成一行

  tac命令為cat命令相反的方向顯示,而revcat顯示內容每一行的相反顯示,換句話說taccat垂直取反,而revcat水平取反。

 

        2、分頁查看文件內容命令:more,less

      more: 分頁查看文件
                    more [OPTIONS…] FILE…
               -d: 顯示翻頁及退出提示
                v less:一頁一頁地查看文件或STDIN輸出
                查看時有用的命令包括:
                /文本 搜索 文本
                n/N 跳到下一個 或 上一個匹配
                less 命令是man命令使用的分頁器

 

       3、顯示文本前后幾行的內容:headtail

     head [OPTION]… [FILE]…
          -c #: 指定獲取前#字節
          -n #: 指定獲取前#
                    – #: 指定行數

                tail [OPTION]… [FILE]…
                    c #: 指定獲取后#字節
                    -n #: 指定獲取后#
                    -f: 跟蹤顯示文件新追加的內容,常用日志監控

 

    二、抽取文本的工具cut和合并文件工具paste

cut [OPTION]… [FILE]…
        -d DELIMITER: 指明分隔符,默認tab
                -f FILEDS:
                #: #個字段
                #,#[,#]:離散的多個字段,例如1,3,6
                #-#:連續的多個字段, 例如1-6
        混合使用: 1-3,7
                -c 按字符切割
            –output-delimiter=STRING指定輸出分隔符

    顯示文件或STDIN數據的指定列
                cut -d: -f1 /etc/passwd
                cat /etc/passwd | cut -d: -f7
                cut -c2-5 /usr/share/dict/words

 

paste 合并兩個文件同行號的列到一行
    paste [OPTION]… [FILE]…
        -d 分隔符:指定分隔符,默認用TAB
        -s : 所有行合成一行顯示
        paste f1 f2
        paste -s f1 f2

 

 

    三、分析文本的工具

    文本數據統計: wc
    整理文本: sortuniq
    比較文件: diffpatch

 

    計數單詞總數、行總數、字節總數和字符總數,可以對文件或STDIN中的數據運行
                $ wc story.txt
                39 237 1901 story.txt
        行數 字數 字符數
            使用 -l 來只計數行數
            使用 -w 來只計數單詞總數
            使用 -c 來只計數字節總數
            使用 -m 來只計數字符總數 

把整理過的文本顯示在STDOUT,不改變原始文件


        $ sort [options] file(s)
       常用選項
         -r 執行反方向(由上至下)整理
        -n 執行按數字大小整理
         -f 選項忽略( fold)字符串中的字符大小寫
         -u 選項(獨特, unique)刪除輸出中的重復行
         -t c 選項使用c做為字段界定符
        -k X 選項按照使用c字符分隔的X列來整理能夠使用多次

 

        uniq命令:從輸入中刪除重復的前后相接的行
              uniq [OPTION]… [FILE]…
                -c: 顯示每行重復出現的次數
                -d: 僅顯示重復過的行
                -u: 僅顯示不曾重復的行
                連續且完全相同方為重復
                常和sort 命令一起配合使用:先排序后計數sort userlist.txt | uniq -c

 

        比較兩個文件之間的區別
                $ diff foo.conf-broken foo.conf-works
                < use_widgets = no
                    —
                > use_widgets = yes
                注明第5行有區別(改變)

 

    diff 命令的輸出被保存在一種叫做補丁的文件中使用 -u 選項來輸出統一的( unified” diff格式文
件,最適用于補丁文件。
patch 命令復制在其它文件中進行的改變(要謹慎使用?。?/span>
     適用 -b 選項來自動備份改變了的文件
     diff -u foo.conf-broken foo.conf-works > foo.patch
     patch -b foo.conf-broken foo.patch

以上部分文本處理工具相關命令的練習,見本期博客的練習題部分

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

(0)
AndyIvanXueAndyIvanXue
上一篇 2016-08-08
下一篇 2016-08-08

相關推薦

  • CA服務器的搭建以及證書簽署、dropbear的編譯安裝

    CA服務器的搭建以及證書簽署、dropbear的編譯安裝 一、CA Server和Client: 1、CA server:創建私鑰CA (1)   openssl的配置文件:/etc/pki/tls/openssl.conf   如果Client端的申請是來自不同的國家,則需要將下圖中紅色框內的三項,由“match”改為“opt…

    Linux干貨 2016-09-23
  • N26_第一周作業

    計算機的組成 計算機由五大部分組成:    1.控制器(control):是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、地址,協調計算機各部分工作及內存與外設的訪問等;    2.運算器(datapath):運算器的功能是對數據進行各種算術運算和邏輯運算,即對數據進行…

    Linux干貨 2016-12-28
  • 馬哥教育網絡班21期-第一次課程作業

    計算機組成部分及其作用 1.總線 電子管道,攜帶信息字節并在各個部件間傳輸。分為地址總線,數據總線,控制總線。 CPU最大可尋址范圍:2^N*M,  N為地址總線數量,M為數據總線數量。 2.I/O設備 I/O設備及輸入輸出設備,最常見的輸入設備就是我們非常熟悉的鍵盤,鼠標,我們通過我們通過這些設備向計算機傳達指令,讓計算機完成我們想要它完成的工作…

    Linux干貨 2016-06-29
  • 馬哥面授班20期-第一周(計算機基礎,linux入門)

    一.計算機發展歷史及硬件組成部分     計算機發展歷史:第一代:(1946-1957)電子管時代,第二代:(1958-1964)晶體管時代,              第三代:(1965-1970)集成電路時…

    Linux干貨 2016-07-26
  • 網絡接口配置-bonding

    bonding      就是將多塊網卡綁定同一個IP地址對外提供服務,可以實現高可用或是負載均衡,當 然,直接給兩塊網卡設置同一個IP地址是不可能的,通過bonding,虛擬一塊網卡對外提供鏈接,這樣即使一塊網卡壞了可以經行自動切換,而不會影響業務的正常的通信 Bonding的工作模式 mode 0 輪轉(…

    Linux干貨 2016-09-05
  • N25-第五周博客作業

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; [root@localhost ~]# grep "^[[:space:]]\+" /boot/grub/grub.conf      root (hd0,0)…

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