linux100day(day4)--文字處理三劍客

fissure發表於2019-08-15

  

在介紹三劍客之前,先來認識一下萬用字元和正規表示式

萬用字元
    

正規表示式

作用:通過一些特殊字元,來表示一類字元內容

1、字元匹配

  .     任意一個字元

  [ ]   範圍內的任意一個字元

  [^ ] 取反

  字元類 [:digit:] [:alnum:] [:alpha:] [:lower:] [:upper:] [:space:] [:punct:]

2、次數匹配

  *    匹配前面的字元0次到多次

  ?  匹配前面的字元0次到1次

  +    匹配前面的字元1次到多次

3、位置錨定

  ^  錨定行首

  $  錨定行尾

  \b  錨定詞首和錨定詞尾

  \>  錨定詞尾

  \<  錨定詞首

  <\root\>  匹配root單詞

  \{m\}     匹配前面的字元m次

  \{m,n\}  匹配前面的字元m到n次

 

4、分組

  \(\)

  分組特性:預設清空下,linux系統下回為分組指定變數,變數表示形式\1 \2 \3

day4--文字處理三劍客awk,sed,grep

三劍客用法非常靈活強大,需要在練習中慢慢體會,遂以練習為主。

  awk(報告生成器)                                                                            

     awk作為三劍客的老大,擅長於取列,主要用來做文字輸出格式化

     awk在處理檔案時是逐行處理的

     在awk中,全部行稱為$0,第一個欄位稱為$1,第二個欄位稱為$2……

     NR為行號,NF表示最後一行

     BEGIN表示最開始執行,END表示最末尾執行,因為這種特性,BEGIN常常用來賦值

     awk  [選項] [處理命令(指令碼)]  [檔案]

awk -F 指定輸入檔案折分隔符
awk -v 賦值一個使用者定義變數
awk -f 從指令碼檔案中讀取awk命令

      例1、輸出/etc/passwd第一行的第一個域

      

      例2、列印出/etc/passwd的第3個域和第5個域

      

      例3、匹配/var/log/message中,帶有erro關鍵字的相關資訊

      

      例4、輸出/etc/passwd中檔名,行數,列數,和整行資訊     

      awk -F ':' '{print FILENAME, NR , NF ,$0}' /etc/passwd

      例5、使用冒號分隔符,查詢最後一列

      

      例6、使用awk輸出第一塊網路卡的ip地址

       

 

  sed(流處理器)                        

    sed作為三劍客的老二,擅長取行,替換和資料搜尋  

    sed [選項] [指令碼] [檔案]

sed -e 以選項中指定的指令碼來處理輸入結果
sed -f 以選項中指定的指令碼檔案來處理輸入結果
sed -n 只顯示處理後結果
sed -i 替換

    例1、檢視/etc/passwd5-10行

      

      這個p代表print列印,同理,d代表delete刪除

    例2、搜尋/etc/passwd中有root關鍵字的行

      

    例3、新建一個檔案,並刪除2到4行

      

 

  grep(文字行過濾工具)                    

    grep [option]... PATTERN [FILE]

               PATTERN一般使用兩種方法,正規表示式和萬用字元

    egrep = grep -E 使用擴充套件的正規表示式進行匹配

    fgrep = fast grep 只使用檔案萬用字元進行匹配

    grep 預設使用正規表示式進行文字匹配

grep -P使用perl語言的正規表示式引擎進行搜尋
grep -f指定檔案
grep -i 忽略大小寫
grep -v反選
grep --color=auto 語法著色
grep -c統計
grep -o輸出時僅顯示匹配內容(預設輸出的是匹配到的行)
grep -n顯示行號
grep -w只匹配與整個單詞匹配的行

     例1、顯示/proc/meminfo檔案中大小s開頭的行

      

     例2、顯示/etc/passwd檔案中不以/bin/bash結尾的行

      

     例3、顯示/etc/passwd檔案中UID最大的使用者的使用者名稱

      

     例4、如果使用者root存在,顯示其預設的shell程式

       

      例5、找出/etc/passwd中的兩位或三位數

      

 

相關文章