shell之三大文本處理工具grep、sed及awk


grep、sed和awk都是文本處理工具,雖然都是文本處理工具單卻都有各自的優缺點,一種文本處理命令是不能被另一個完全替換的,否則也不會出現三個文本處理命令了。只不過,相比較而言,sed和awk功能更強大而已,且已獨立成一種語言來介紹。

grep:文本過濾器,如果僅僅是過濾文本,可使用grep,其效率要比其他的高很多;

sed:Stream EDitor,流編輯器,默認只處理模式空間,不處理原數據如果你處理的數據是針對行進行處理的,可以使用sed;

awk:報告生成器,格式化以后顯示。如果對處理的數據需要生成報告之類的信息,或者你處理的數據是按列進行處理的,最好使用awk。

 

grep

 

grep(關鍵字: 截取) 文本搜集工具, 結合正則表達式非常強大
主要參數 []
-c : 只輸出匹配的行
-I : 不區分大小寫
-h : 查詢多文件時不顯示文件名
-l : 查詢多文件時, 只輸出包含匹配字符的文件名
-n : 顯示匹配的行號及行
-v : 顯示不包含匹配文本的所有行(我經常用除去grep本身)
基本工作方式: grep 要匹配的內容 文件名, 例如:
       grep 'test' d* 顯示所有以d開頭的文件中包含test的行
       grep 'test' aa bb cc 顯示在 aa bb cc 文件中包含test的行
       grep '[a-z]\{5}\' aa 顯示所有包含字符串至少有5個連續小寫字母的串

上文已經做出說明

        http://www.cnblogs.com/-zyj/p/5760484.html

 

sed

 

sed(關鍵字: 編輯) 以行為單位的文本編輯工具 sed可以直接修改檔案, 不過一般不推薦這么做, 可以分析 standard input
基本工作方式: sed [-nef] '[動作]' [輸入文本]
          a\ : 在當前行后添加一行或多行。多行時除最后一行外,每行末尾需用“\”續行
      c\ :用此符號后的新文本替換當前行中的文本。多行時除最后一行外,每⾏末尾需用”\"續行
      i\ :在當前行之前插入文本。多行時除最后一行外,每行末尾需用”\"續行刪除行
      h : 把模式空間里的內容復制到暫存緩沖區
      H : 把模式空間里的內容追加到暫存緩沖區
     g : 把暫存緩沖區里的內容復制到模式空間,覆蓋原有的內容
     G: 把暫存緩沖區的內容追加到模式空間⾥,追加在原有內容的后面
     l : 列出非打印字符
     p : 打印行
     q : 結束或退出sed
     r : 從文件中讀取輸入行
     ! : 對所選行以外的所有行應用命令
     s : 用一個字符串替換另一個
     g : 在行內進行全局替換
      w : 將所選的行寫入文件
     x : 交換暫存緩沖區與模式空間的內容
     y : 將字符替換為另一字符(不能對正則表達式使用y命令)
選項
  -e : 進行多項編輯,即對輸入行應用多條sed命令時使用
  -n : 取消默認的輸出
  -f :指定sed腳本的文件名

示例:

      

 

awk

 

sed以行為單位處理文件,awk比sed強的地方在於不僅能以行為單位還能以列為單位處理文件。 awk缺省的行分隔符是換行,缺省的列分隔符是連續的空格和Tab,

但是行分隔符和列分隔符都可以自定義,比如/etc/passwd文件的每一行有干個字段,字段之間以:分隔,就可以重新定義awk的列分隔符為:並以列為單位處理這個文件。

awk實際上是一門很復雜的腳本語言,還有像C語言一樣的分支和循環結構,但是基本語法和sed類似,awk命令行的基本形式為:

  awk option 'script' file1 file2 ...


  awk option -f scriptfile file1 file2 ...
  和sed一樣,awk處理的文件既可以由標准輸入重定向得到,也可以當命令行參數傳入,編輯命令可以直接當命令行參數傳入,也可以-f參數指定一個腳本文件,

編輯命令的格式為:

  /pattern/{actions}

  和sed類似,pattern是正則表達式,actions是一系列操作。 awk程序一行一行讀出待處理文件,如果某一行與pattern匹配,或者滿condition條件,

則執行相應的actions,如果一條awk命令只有actions部分,則actions作用於待處理文件的每一行。

示例:

   

 

注:

$0:表示當前行

$1:表示當前行的第一列

$2:表示當前行的第二列

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM