1. 程式人生 > 其它 >grep、sed 和 awk 文字三劍客

grep、sed 和 awk 文字三劍客

grep、sed 和 awk 簡介

awk、grep、sed 是 Linux 操作文字的三大利器,合稱文字三劍客,也是必須掌握的 Linux 命令之一。三者的功能都是處理文字,但側重點各不相同,其中屬 awk 功能最強大,但也最複雜。

  • grep 更適合單純的查詢或匹配文字

  • sed 更適合編輯匹配到的文字

  • awk 更適合格式化文字(對文字進行較複雜格式處理)

grep

Linux系統中 grep 命令是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來(匹配到的標紅)。grep 全稱是 Global Regular Expression Print,表示全域性正則表示式版本,它的使用許可權是所有使用者。

grep 的工作方式是這樣的,它在一個或多個檔案中搜索字串模板。如果模板包括空格,則必須被引用,模板後的所有字串被看作檔名。搜尋的結果被送到標準輸出,不影響原檔案內容。

grep 可用於 shell 指令碼,因為 grep 通過返回一個狀態值來說明搜尋的狀態,如果模板搜尋成功,則返回 0,如果搜尋不成功,則返回1,如果搜尋的檔案不存在,則返回 2。我們利用這些返回值就可進行一些自動化的文字處理工作。

  egrep = grep -E:擴充套件的正則表示式 (除了< , > , \b 使用其他正則都可以去掉\)

命令格式
grep [option] pattern file
命令功能

用於過濾/搜尋的特定字元。可使用正則表示式能多種命令配合使用,使用上十分靈活。

常用引數
  • -A<顯示行數>:除了顯示符合範本樣式的那一列之外,並顯示該行之後的內容。

  • -B<顯示行數>:除了顯示符合樣式的那一行之外,並顯示該行之前的內容。

  • -C<顯示行數>:除了顯示符合樣式的那一行之外,並顯示該行之前後的內容。

  • -c:統計匹配的行數

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

  • -E:擴充套件的正則表示式

  • -f FILE:從FILE獲取PATTERN匹配

  • -F :相當於fgrep

  • -i --ignore-case #忽略字元大小寫的差別。

  • -n:顯示匹配的行號

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

  • -q: 靜默模式,不輸出任何資訊

  • -s:不顯示錯誤資訊。

  • -v:顯示不被pattern 匹配到的行,相當於[^] 反向匹配

  • -w :匹配整個單詞

  • -r 或 --recursive : 以遞迴的方式查詢符合條件的檔案

cut

cut [選項] 檔名 預設分割符是製表符

選項:

-f 列號: 提取第幾列

-d 分隔符: 按照指定分隔符分割列

cut 的侷限性:不能分割空格

awk

一個強大的文字分析工具

把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。

語法:awk ‘條件1{動作1}條件2{動作2}...’檔名

條件(Pattern):

  • 一般使用關係表示式作為條件: > >= <=等

動作(Action):

  • 格式化輸出:print 和 printf

  • 流程控制語句

指定分割符:-F分隔符

sed

sed 是一個非互動性文字流編輯器。它編輯檔案或標準輸入匯出的文字拷貝(複製然後再修改)。標準輸入可能是來自鍵盤、檔案重定向、字串或變數,或者是一個管道的文字。

注意: sed 並不與初始化檔案打交道, 它操作的只是一個拷貝,然後所有的改動如果沒有重定向到一個檔案,將輸出到螢幕。

語法:sed [選項]’[動作]’ 檔名

常用選項:

  • -n  使用安靜(silent)模式。顯示經過 sed 特殊處理的資料

  • -e  允許多點編輯

  • -i  直接修改讀取的檔案內容,而不是由螢幕輸出。

命令功能描述
a\ 新增, a 的後面可以接字串,在下一行出現
c\ 替換
d 刪除
i\ 插入, i 的後面可以接字串
p 列印
s 查詢並替換,例如 1,20s/old/new/g