新聞中心
在Linux系統(tǒng)中,awk和sed是兩個非常常見的工具,它們都是文本處理工具,用于處理文本文件。雖然它們具有相似的功能,但是它們之間還是有很大的區(qū)別。本文將對它們的區(qū)別進行解析。

1. 定義
awk是一種處理文本文件的工具,它可以對文本文件進行復雜的操作,比如查找、替換、排序、計算等。awk的名稱來自于其創(chuàng)始人的全名:Alfred Aho、Peter Weinberger和Brian Kernighan。
而sed是一種流編輯器,主要用于對文本文件進行流式處理。sed的名稱來自于其命令序列編輯器的名稱流的首字母和單詞編輯器的首字母。
2. 用途
awk和sed都可以用來處理文本文件,但是它們的用途略有不同。awk更適合用于處理結(jié)構(gòu)化數(shù)據(jù),比如分隔符分隔的文件或者表格格式文件。它可以對文件進行分組、計算、過濾等操作。awk還可以對普通的文本進行處理,并且可以用于編寫腳本。
sed則更適合用于對文本文件進行替換、插入、刪除等操作。它通常用于處理單行數(shù)據(jù)而不是多行數(shù)據(jù)。
3. 語法
awk和sed的語法也有所不同。awk的語法是由模式、動作和輸入文件組成的。模式用于匹配文本,動作用于對匹配到的文本進行處理,輸入文件則是要進行處理的文件。
而sed的語法是由地址、命令和輸入文件組成的。地址用于確定要處理的文本范圍,命令用于對文本進行操作,輸入文件則是要進行處理的文件。
4. 編程能力
awk與sed相比,具有更強的編程能力。awk支持變量、條件和循環(huán)等基本編程語言的元素,可以編寫復雜的腳本。而sed的編程能力則相對較弱,主要用于進行文本替換、刪除等操作。
5. 性能
awk與sed在性能上也有差異。awk更適合用于處理大文件,因為它可以在內(nèi)存中緩存數(shù)據(jù),而sed則不行。如果要處理的是小文件,則sed的速度會更快。
6. 應(yīng)用場景
awk和sed都有自己的應(yīng)用場景。如果需要對結(jié)構(gòu)化數(shù)據(jù)進行處理,比如表格格式文件或者csv格式文件,使用awk會更好。而如果需要進行文本替換或刪除操作,使用sed會更方便。
綜上所述,awk和sed是兩個非常常用的文本處理工具,它們雖然有相似的功能,但是它們之間還是有很大的區(qū)別。根據(jù)不同的需求和場景,我們可以選擇使用不同的工具。
相關(guān)問題拓展閱讀:
- linux三劍客是什么意思
- linux里awk是做什么的,請詳細說明
linux三劍客是什么意思
linux三劍客命令-grep、sed、awk
grep 命令 :強大的文本’搜索’工具
1.grep -n ‘word’ file_name
在file_name文件中找到word所在的所有行并顯示。-n 為顯示行號。
2.grep ‘wll’ file_name
在file_name文件中找到wall 或者是well 所在的所有行并顯示
3.grep ‘wll’ file_name
在file_name文件中找到”非well” 所在的所有行并顯示
4.grep ‘^The’ file_name
在file_name文件中找到以The開頭的所有行并顯示(請與上一條命令進行區(qū)別)
5. grep’goo..le’ file_name
在file_name文件中找到goo(任意字符)(任意字符)le的所有行并顯示(即總共七個字符)
6.grep ‘g*g’ file_name
在file_name文件中找到g , gg , ggg等的所有行并顯示(*代表重復前一個字符0~~無窮多次)
7.grep ‘Ty\{2,3\}’ file_name
在file_name文件中找到Tyy,Tyyy的所有行并顯示(注意{}在 shell中有特殊含義,故需要轉(zhuǎn)義)
注意 : grep可以使用grep –color=always 來使得所查找的字符擁有特殊顏色,然后在執(zhí)行source ~/.bashrc 來使得設(shè)置立即生效。
sed :實現(xiàn)數(shù)據(jù)的替換,刪除,增加,選取等(以行為單位進行處理)
1.sed ‘2,4d’ file_name
刪除file_name文件的2到4行
2.sed ‘2a liu …..\
>shengxi is shuai !!!’ file_name
在第二行下新增這樣兩行
3.sed ‘2,4c ni han ma a !!!’ file_name
把file_name文件的2到4行,替換為ni han ma a !!
4.sed ‘2,5p’ -n file_name
把file_name文件的2到5行打印出來(不用-n 參數(shù),就會重復輸出2到5行)
5.sed -i ‘s/a\\./p_temp->/g’ file_name
把file_name文件中的a. 全部替換為p_temp-> (-i 會直接將修改寫入文件, 和 . 是特殊符號,需要用\來轉(zhuǎn)義一下)
awk : 以字段為單位進行處理(其實就是把一行的數(shù)據(jù)分割,然后進行處理)
先介紹一些關(guān)于awk的用法:
1.$0 代表一整行的數(shù)據(jù)
2.$1 代表第隱埋一個字段,用人的話來說就是之一列的數(shù)據(jù)
3.$2 以此類推
4.NF 每一行擁有的字段總數(shù)
5.NR 目前處理的是第幾行的凳漏數(shù)據(jù)
6.FS 目前的分隔字符
7.命令格式 :awk ‘條件{命令1} 條件{命令2}…’ file_name
具體命令:
1. awk ‘NR
把file_name 文件中的前五行的之一列,第二列的數(shù)據(jù)列出來 (以或空格鍵分隔)
2.awk ‘{print “該行數(shù)據(jù)為” $0 “\t” “該行的字段總數(shù)為” NF “\t” “目前這是第幾行” NR}’ file_name
3. awk ‘BEGIN{FS=”:”} $3
把/etc/passwd文件的之一列與第三列列出來(BEGIN可以讓我們自己設(shè)置的分隔字符立即生效)
/etc/passwd 文件中之一列是帳戶,第三列是UID(就是用戶ID)。該文棗攜爛件以 : 號分隔,一行代表一個用戶,記錄關(guān)于用戶的各種信息。
特殊說明:
1.print 默認帶有換行符,printf 沒有
2.像\n ,\t,這種符號應(yīng)該用雙引號括起來
3.NR,NF等變量要用大寫,并且不需要 $
三劍客命令總結(jié):
-記住三個命令的運用形式
grep ‘字符’文件
sed ‘命令’文件
awk ‘條件{命令}’ 文件
-死記一點,單引號內(nèi)就是正則表達式的用法
重復一遍:單引號內(nèi)一定是正則表達式,一定,一定?。?!
shell命令: awk grep sed
grep
是一個強大的文本搜索工具,能使用正則表達式搜索文本,并把匹配的行打印出來,grep全稱是Global Regular Expression
Print,表示全局正則表達式版本,它的使用權(quán)限是所有用戶。
grep的工作方式是,它在一個或多個文扮櫻兄件中搜索字符串模板,如果模板包括空格,則必須被引用,模板后的所有字符串被看作文件名,搜索的結(jié)果被送到標準輸出,不影響原文件內(nèi)容。
grep可以用于shell腳本,因為廳襲grep通過返回一個狀態(tài)值來說明搜索的狀態(tài),如果模板搜索成功,則返回0,如果搜索不成功,則返回1,如果搜索的文件不存在,則返回2,可以利用這些返回值,進行一些自動化的文本處理工作。
awk
awk是一種編程語言,用于在Linux/Unix下對文本和數(shù)據(jù)進行處理,數(shù)據(jù)可以來自標準輸入、一個或多個文件,或其他命令的輸出,它支持用戶自定義函數(shù)和動態(tài)正則表達式等先進功能,是Linux/Unix下的一個強大編程工具,它在命令行中使用,但更多是作為腳本來使用。
awk有很多內(nèi)建的函數(shù),比如數(shù)組、函數(shù)等,這是它和C語言的相同之處,靈活性是awk更大的優(yōu)點。
sed
是一種流編輯器,一次處理一行內(nèi)容,把當前處理的行存儲在臨時緩沖頌虛區(qū)中,稱為模式空間,接著用sed命令來處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。
然后讀入下行,執(zhí)行下一個循環(huán),文件內(nèi)容并沒有改變,除非你使用重定向存儲輸出或-i。
linux里awk是做什么的,請詳細說明
awk語言的最基本功能是在文件或字符串李鄭凳中基于指定規(guī)則來哪旅分解抽取信息,也可以叢大基于指定的規(guī)則來輸出數(shù)據(jù)。完整的awk腳本通常用來格式化文本文件中的信息。
你比如:
echo “11|22|33” | awk -F “|” ‘{print $2}’
awk是一個強大的文本分析工具,相對于grep的查找,sed的編輯,awk在其對數(shù)據(jù)分析并生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部孫賣分再進行各種分析處理。
awk有三個不同的版本:awk、nawk和gawk,未作特別說明,一般指gawk,gawk是awk的GNU版本。
之所以叫awk是因為其取了三位創(chuàng)始人Alfred Aho,Peter Weinberger,和Brian Kernighan的Family Name
的首字符。
使用方法:
awk'{pattern+action}'{filenames}
盡管操作可能會很復雜,廳凱裂但語法總是這樣,其中pattern表示awk在數(shù)據(jù)中查找的內(nèi)容,而action是在找到匹配內(nèi)容時所執(zhí)行的一系列命令。花括號({})不需要在程序中始終出現(xiàn),但它們用于根據(jù)特定的模式對一系列指令進行分組。pattern就是要表示的正則表達式,用斜杠括起來。
awk語言的最基本功能是在文件或者字符串中基于指定規(guī)則瀏覽和抽取信息,awk抽取信息后,才能進行其他文本操作。完整的awk腳本通常用來格式化文本文件中的信息。
通常,awk是以文件的一行為處理單位的。awk每接收文件的一行,然后執(zhí)行相應(yīng)的命令,來處理文本。
調(diào)用awk的三種方式
1、命令行方式
awk’commands’input-file(s)
其中,commands是真正awk命令,是可選的。input-file(s)是待處理的文件。
在awk中,文件的每一行中,由域分隔符分開的每一項稱為一個域。通常,在不指名-F域分隔扮閉符的情況下,默認的域分隔符是空格。
2、shell腳本方式
將所有的awk命令插入一個文件,并使awk程序可執(zhí)行,然后awk命令解釋器作為腳本的首行,一遍通過鍵入腳本名稱來調(diào)用。
相當于shell腳本首行的:#!/bin/sh
可以換成:#!/bin/awk
3、將所有的awk命令插入一個單獨文件,然后調(diào)用:
awk-f awk-script-file input-file(s)
其中,-f選項加載awk-script-file中的awk腳本,input-file(s)跟上面的是一樣的。
linux awk sed 區(qū)別的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux awk sed 區(qū)別,解析Linux中awk和sed的區(qū)別,linux三劍客是什么意思,linux里awk是做什么的,請詳細說明的信息別忘了在本站進行查找喔。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級標準機房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達10T,機柜接入千兆交換機,能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認可。
本文名稱:解析Linux中awk和sed的區(qū)別(linuxawksed區(qū)別)
新聞來源:http://www.5511xx.com/article/dpehpid.html


咨詢
建站咨詢
