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 |