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

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


咨詢(xún)
建站咨詢(xún)
