瞭解awk、sed、grep

閱讀這篇文章,你將會了解:
1.awk、sed、grep的區別;
2.他們分別有什麼命令可以使用,用到的時候可以查閱;

一. awk、sed、grep的區別

概念 模版
SED 在線編輯器,一次處理一行內容。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲“模式空間”(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。文件內容不發生改變,除非使用-i命令聲明。 sed [-option] ‘command’ file
AWK 相對於sed 常常作用於一整個行的處理,awk傾向於將每行分成數個“字段”來處理,可以理解爲處理列。 awk [-F|-f|-v] ‘BEGIN{} /command/ {command1; command2} END{}’ file
GREP 文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來 grep [command] file

有以下的文本:test.txt,把有name的行找出來

my cat's name is betty
this is your dog
my dog's name is frank
this is your fish
my fish's name is george
this is your goat
my goat's name is adam
概念 解釋
SED sed -n ‘/ name /p’ test.txt -n:僅顯示script處理後的結果,p:表示打印行
AWK awk -F’ ’ ‘{if($3==“name”){print $0}}’ test.txt -F:每行根據後面的字符切割,$3:第三列,$0:當前行
GREP grep ’ name ’ test.txt

二. awk

模式:
awk [-F|-f|-v] ‘BEGIN{} /command{command1; command2} END{}’ file

標準模式下的含義:

描述
[-F|-f|-v] 大參數,-F指定分隔符,-f調用腳本,-v定義變量 var=value
’ ’ 引用代碼塊
BEGIN 初始化代碼塊,在對每一行進行處理之前,初始化代碼,主要是引用全局變量,設置FS分隔符
/command/ 匹配代碼塊,可以是字符串或正則表達式
{} 命令代碼塊,包含一條或多條命令
; 多條命令使用分號分隔
END 結尾代碼塊,在對每一行進行處理之後再執行的代碼塊,主要是進行最終計算或輸出結尾摘要信息

特殊的屬性:

描述
$0 表示整個當前行
$1 每行第一個字段
NF 字段數量變量
NR 每行的記錄號,多文件記錄遞增
FNR 與NR類似,不過多文件記錄不遞增,每個文件都從1開始
\t 製表符
\n 換行符
FS BEGIN時定義分隔符
RS 輸入的記錄分隔符, 默認爲換行符(即文本是按一行一行輸入)
~ 匹配,與==相比不是精確比較
!~ 不匹配,不精確比較
== 等於,必須全部相等,精確比較
!= 不等於,精確比較
&& 邏輯與
|| 邏輯或
+ 匹配時表示1個或1個以上
/[0-9][0-9]+/ 兩個或兩個以上數字
/[0-9][0-9]*/ 一個或一個以上數字
FILENAME 文件名
OFS 輸出字段分隔符, 默認也是空格,可以改爲製表符等
ORS 輸出的記錄分隔符,默認爲換行符,即處理結果也是一行一行輸出到屏幕
-F’[:#/]’ 定義三個分隔符

三. sed

https://linux.cn/article-10232-1.html
模式:
sed [options] ‘command’ file(s)
sed [options] -f scriptfile file(s)

options:

參數 完整參數 說明
-e script –expression=script 以選項中的指定的script來處理輸入的文本文件
-E 默認情況下,Sed 的正則表達式引擎僅理解 POSIX 基本正則表達式 的語法。如果你需要用到擴展正則表達式,你必須在 Sed 命令上添加 -E 標誌
-f script –files=script 以選項中的指定的script文件來處理輸入的文本文件
-h –help 顯示幫助
-n –quiet --silent 僅顯示script處理後的結果
-V –version 顯示版本信息

sed命令:

命令 說明
d 刪除,刪除選擇的行
D 刪除模板塊的第一行
s 替換指定字符
h 拷貝模板塊的內容到內存中的緩衝區
H 追加模板塊的內容到內存中的緩衝區
g 獲得內存緩衝區的內容,並替代當前模板塊中文本
G 獲得內存緩衝區的內容,並追加到當前模板塊文本的後面
l 列表不能打印字符的清單
n 讀取下一個輸入行,用下一個命令處理新的行而不是第一個命令
N 追加下一個輸入行到模板塊後面並在二者間嵌入一個新行,改變當前行號碼
p 打印模板塊的行
P 打印模板塊的第一行
q 退出sed
b label 分支到腳本中帶有標記的地方,如果分支不存在則分支到腳本的末尾
r file 從file中讀行
t label if分支,從最後一行開始,條件一旦滿足或者T,t命令,將導致分支到帶有標號的命令處,或者到腳本的末尾
T label 錯誤分支,從最後一行開始,一旦發生錯誤或者T,t命令,將導致分支到帶有標號的命令處,或者到腳本的末尾
w file 寫並追加模板塊到file末尾
W file 寫並追加模板塊的第一行到file末尾
! 表示後面的命令對所有沒有被選定的行發生作用
= 打印當前行號
# 把註釋擴展到第一個換行符以前

四. grep

模式:
grep [options] [command] file

options:

描述
-a 將 binary 文件以 text 文件的方式搜尋數據
-c 計算找到 ‘搜尋字符串’ 的次數
-i 忽略大小寫的不同,所以大小寫視爲相同
-n 順便輸出行號
-v 反向選擇,亦即顯示出沒有 ‘搜尋字符串’ 內容的那一行!
-s 不顯示錯誤信息
-w 只顯示全符合的列
-o 只輸出匹配到的部分

五. 參考文檔

sed: https://www.cnblogs.com/maxincai/p/5146338.html
awk: https://www.cnblogs.com/xudong-bupt/p/3721210.html
https://blog.csdn.net/wangyeshun/article/details/82562688

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章