1. 程式人生 > >shell中的文字處理(grep,sed,awk命令)

shell中的文字處理(grep,sed,awk命令)

  • grep    文字過濾命令
  • sed    行編輯器
  • awk    報告生成器

一、grep命令

  •     全面搜尋研究正則表示式並顯示出來grep 命令是一種強大的文字搜尋工具 , 根據使用者指定的“模式”對目標文字進行匹配檢查 , 列印匹配到的行
  •     由正則表示式或者字元及基本文字字元所編寫的過濾條件

grep       匹配條件   處理檔案

-a 不要忽略二進位制資料。
-d<進行動作> 當指定要查詢的是目錄而非檔案時,必須使用這項引數,否則grep命令將回報資訊並停止動作。
-E 將範本樣式為延伸的普通表示法來使用,意味著使用能使用擴充套件正則表示式。
-i 忽略字元大小寫的差別。
-n
在顯示符合範本樣式的那一列之前,標示出該列的編號。 -s 不顯示錯誤資訊。 -v 反轉查詢。

    ^    匹配字串開始

    $    匹配字串結尾

例如:

    grep root passwd    #匹配root關鍵字
    grep ^root passwd    #匹配開始字串為root
    grep root$ passwd    #匹配字串結尾為root
    grep -i root passwd    #忽略大小寫匹配root

    grep -E "root|ROOT" passwd    #擴充套件正則表示式,匹配root或ROOT



grep 中字元的匹配次數設定


        *字元出現 [0- 任意次 ]
        \?字元出現 [0-1 次 ]
        \+字元出現 [1- 任意次 ]
        \{n\}字元出現 [n 次 ]
        \{m,n\} 字元出現 [ 最少出現 m 次,最多出現 n 次 ]
        \{0,n\}字元出現 [0-n 次 ]
        \{m,\}字元出現 [ 至少 m 次 ]

        \(xy\)\{n\}xy 關鍵字出現 [n 次 ]




  • 加上-E後可以省略轉意\字元


sed 行編輯器

   用來操作純 ASCII 碼的文字

    處理時 , 把當 前處理的行儲存在臨時緩衝區中 , 稱為“模式空間” (pattern space) 可以指定僅僅處理哪些行
sed 符合模式條件的處理 不符合條件的不予處理,處理完成之後把緩衝區的內容送往螢幕接著處理下一行 , 這樣不斷重複 , 直到檔案末尾

呼叫 sed 命令有兩種形式:

  • sed [options] 'command' file(s)
  • sed [options] -f scriptfile file(s)

在檔案sedfile中寫上匹配字元


sed 對字元的處理

    p 顯示
    d 刪除
    a 新增
    c 替換
    w 寫入
    i 插入

  • p 模式操作

  • d 模式操作

  • w 模式操作
  • 把以UUID開始的行儲存到/mnt/sedfile

  • 第六行寫上/mnt/sed的內容


  • 2-4行寫到檔案/mnt/sedfile中



其他用法
=    #加上行號

  • G    #新增空行



awk 報告生成器


    awk 處理機制 :awk 會逐行處理文字 , 支援在處理第一行之前做一些準備工作 , 以及在處理完最後一行做一些總結性質的工作 , 在命令格式
上分別體現如下 :
    BEGIN{}: 讀入第一行文字之前執行 , 一般用來初始化操作
    {}: 逐行處理 , 逐行讀入文字執行相應的處理 , 是最常見的編輯指令快

    END{}: 處理完最後一行文字之後執行 , 一般用來輸出處理結果

awk 的基本用法

    awk '{print 第 "NR" 行 , 有 "NF" 列 }

    awk 'BEGIN{a=0}{a++}END{print a}' passwd
    awk 
-F : '/^ro/{print}' /etc/passwd
    awk 
-F : '/^[a-d]/{print $1,$6}' passwd
    awk 
-F : '$6~/bin$/{print $1,$6}' passwd
    awk 
-F : '$7!~/nologin$/{print $1,$7}' passwd