Linux--shell腳本之文本處理工具


文本處理工具--grep、sed、awk

  Bash Shell提供了功能強大的文件處理工具:sed(流編輯器stream editor)和awk,都可使用正則表達式進行模式匹配。

而grep又有助於理解sed和awk。

1、grep

Linux系統中grep命令是一種強大的文本搜索、查找過濾工具,,它能使用正則表達式搜索文本,並把匹 配的行打印出來。grep全

稱是Global Regular Expression Print,表示全局正則表達式版本,它的使用權限是所有用戶。

grep格式:grep [選項] [模式] [文件...],它在一個或多個文件中搜索滿足模式的文本行。

常用的grep選項有:
  -c 只輸出匹配行的計數。
  -i 不區分大小寫(只適用於單字符)。
  -h 查詢多文件時不顯示文件名。
  -l 查詢多文件時只輸出包含匹配字符的文件名。
  -n 顯示匹配行及行號。
  -s 不顯示不存在或無匹配文本的錯誤信息。
  -v 顯示不包含匹配文本的所有行。

eg:(在前一篇正則表達式中已經寫到了,這里偷個懶,把昨天的圖用一下吧)

 

2、sed

  sed意為流編輯器(Stream Editor),在Shell腳本和Makefile中作為過濾器使用非常普遍,也就是把前一個程序的輸出引入sed

的輸入,經過一系列編輯命令轉換為另一種格式輸出。 sed和vi都源於早期UNIX的ed工具,所以很多sed命令和vi的末行命令是相

同的。
sed命令行的基本格式為:
  sed option 'script' file1 file2 ...

  sed option -f scriptfile file1 file2 ...
 sed處理的文件既可以由標准輸入重定向得到,也可以當命令行參數傳入,命令行參數可以多次傳入多個文件,sed會依次處理。 sed

的編輯命令可以直接當命令行參數傳入,也可以寫成一個腳本文件然后用-f參數指定,編輯命令的格式為:

  /pattern/action

  其中pattern是正則表達式,action是編輯操作。 sed程序一行一行讀出待處理文件,如果某一行與pattern匹配,則執行相應的action,

如果一條命令沒有pattern而只有action,這個action將作用於待處理文件的每一行。

 

sed命令告訴sed如何處理由地址指定的各輸入行,如果沒有指定地址則處理所有的行。
命令
  a\ : 在當前行后添加一行或多行。多行時除最后一行外,每行末尾需用“\”續行
  c\ :用此符號后的新文本替換當前行中的文本。多行時除最后一行外,每⾏末尾需用”\"續行
  i\ :在當前行之前插入文本。多行時除最后一行外,每行末尾需用”\"續行刪除行
  h : 把模式空間里的內容復制到暫存緩沖區
  H : 把模式空間里的內容追加到暫存緩沖區
  g : 把暫存緩沖區里的內容復制到模式空間,覆蓋原有的內容
  G: 把暫存緩沖區的內容追加到模式空間⾥,追加在原有內容的后面
  l : 列出非打印字符
  p : 打印行
  q : 結束或退出sed
  r : 從文件中讀取輸入行
  ! : 對所選行以外的所有行應用命令
  s : 用一個字符串替換另一個
  g : 在行內進行全局替換
  w : 將所選的行寫入文件
  x : 交換暫存緩沖區與模式空間的內容
  y : 將字符替換為另一字符(不能對正則表達式使用y命令)
選項
  -e : 進行多項編輯,即對輸入行應用多條sed命令時使用
  -n : 取消默認的輸出
  -f :指定sed腳本的文件名



 

 

3、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作用於待處理文件的每一行。

eg:

注:

$0:表示當前行

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

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

 


免責聲明!

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



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