您好,登錄后才能下訂單哦!
這篇文章主要講解了“linux中sed和awk有哪些區別”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“linux中sed和awk有哪些區別”吧!
區別:1、sed是流編輯器,而awk是文本格式化工具,報告生成器;2、awk適合對文件進行抽取整理,sed適合對文件進行編輯;3、sed讀取一行數據,會以行作為單位進行處理,而awk讀取一行,會切割成字段,以字段(列)為單位,進行細節處理。
本教程操作環境:CentOS 6系統、Dell G3電腦。
awk是一種程序語言,對文檔資料的處理具有很強的功能。awk擅長從格式化報文或從一個大的文本文件中抽取數據。
awk 命令是逐行掃描文件(從第 1 行到最后一行),尋找含有目標文本的行,如果匹配成功,則會在該行上執行用戶想要的操作;反之,則不對行做任何處理。
awk 命令的基本格式為:
awk [選項] '腳本命令' 文件名
此命令常用的選項以及各自的含義,如表 1 所示。
選項 | 含義 |
---|---|
-F fs | 指定以 fs 作為輸入行的分隔符,awk 命令默認分隔符為空格或制表符。 |
-f file | 從腳本文件中讀取 awk 腳本指令,以取代直接在命令行中輸入指令。 |
-v var=val | 在執行處理過程之前,設置一個變量 var,并給其設備初始值為 val。 |
awk 的強大之處在于腳本命令,它由 2 部分組成,分別為匹配規則和執行命令,如下所示:
'匹配規則{執行命令}'
這里的匹配規則,和 sed 命令中的 address 部分作用相同,用來指定腳本命令可以作用到文本內容中的具體行,可以使用字符串(比如 /demo/,表示查看含有 demo 字符串的行)或者正則表達式指定。另外需要注意的是,整個腳本命令是用單引號('')括起,而其中的執行命令部分需要用大括號({})括起來。
在 awk 程序執行時,如果沒有指定執行命令,則默認會把匹配的行輸出;如果不指定匹配規則,則默認匹配文本中所有的行。
舉個簡單的例子:
[root@localhost ~]# awk '/^$/ {print "Blank line"}' test.txt
在此命令中,/^$/ 是一個正則表達式,功能是匹配文本中的空白行,同時可以看到,執行命令使用的是 print 命令,此命令經常會使用,它的作用很簡單,就是將指定的文本進行輸出。因此,整個命令的功能是,如果 test.txt 有 N 個空白行,那么執行此命令會輸出 N 個 Blank line。
sed 命令采用的是流編輯模式,最明顯的特點是,在 sed 處理數據之前,需要預先提供一組規則,sed 會按照此規則來編輯數據。
sed 會根據腳本命令來處理文本文件中的數據,這些命令要么從命令行中輸入,要么存儲在一個文本文件中,此命令執行數據的順序如下:
每次僅讀取一行內容;
根據提供的規則命令匹配并修改數據。注意,sed 默認不會直接修改源文件數據,而是會將數據復制到緩沖區中,修改也僅限于緩沖區中的數據;
將執行結果輸出。
當一行數據匹配完成后,它會繼續讀取下一行數據,并重復這個過程,直到將文件中所有數據處理完畢。
sed 命令的基本格式如下:
sed [選項] [腳本命令] 文件名
該命令常用的選項及含義,如表 1 所示。
選項 | 含義 |
---|---|
-e 腳本命令 | 該選項會將其后跟的腳本命令添加到已有的命令中。 |
-f 腳本命令文件 | 該選項會將其后文件中的腳本命令添加到已有的命令中。 |
-n | 默認情況下,sed 會在所有的腳本指定執行完畢后,會自動輸出處理后的內容,而該選項會屏蔽啟動輸出,需使用 print 命令來完成輸出。 |
-i | 此選項會直接修改源文件,要慎用。 |
成功使用 sed 命令的關鍵在于掌握各式各樣的腳本命令及格式,它能幫你定制編輯文件的規則。
sed是流編輯器,而awk是文本格式化工具,報告生成器
如果文件是格式化的,即由分隔符分為多個域的,優先使用awk
awk適合對文件的抽取整理,sed適合對文件的編輯。
awk適合按列(域)操作,sed適合按行操作
sed:每次讀入一行來處理的,sed 適合簡單的文本替換和搜索,sed讀取一行,以行作為單位,進行處理。
awk:每次讀入一行來處理的(同sed),但awk讀取一行,切割成字段,以字段(列)為單位,進行細節處理。
感謝各位的閱讀,以上就是“linux中sed和awk有哪些區別”的內容了,經過本文的學習后,相信大家對linux中sed和awk有哪些區別這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。