版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Linux自動(dòng)化運(yùn)維項(xiàng)目5:sed流編輯器與awk文本處理工具
學(xué)習(xí)目標(biāo)【知識(shí)目標(biāo)】了解正則表達(dá)式基本概念和語(yǔ)法。了解sed基本概念和語(yǔ)法。了解awk基本概念和語(yǔ)法?!炯寄苣繕?biāo)】掌握正則表達(dá)式的使用方法。掌握sed流編輯器的使用方法。掌握awk文本處理工具的使用方法。【素質(zhì)目標(biāo)】培養(yǎng)讀者誠(chéng)信、務(wù)實(shí)和嚴(yán)謹(jǐn)?shù)穆殬I(yè)素養(yǎng),使其在自動(dòng)化管理工作中保持誠(chéng)信態(tài)度,踏實(shí)工作,嚴(yán)謹(jǐn)細(xì)致,提高服務(wù)質(zhì)量和工作效率。培養(yǎng)讀者的邏輯思維能力,使其能夠分析問(wèn)題,形成嚴(yán)密的推理和論證思維。培養(yǎng)讀者系統(tǒng)分析與解決問(wèn)題的能力,使其能夠深入分析問(wèn)題,掌握相關(guān)知識(shí)點(diǎn),并在實(shí)踐中高效地完成項(xiàng)目任務(wù)。sed流編輯器與awk文本處理工具任務(wù)1:正則表達(dá)式目錄/Contents010203正則表達(dá)式元字符POSIX字符組grep數(shù)據(jù)過(guò)濾01正則表達(dá)式元字符正則表達(dá)式正則表達(dá)式又稱規(guī)律表達(dá)式、規(guī)則運(yùn)算式,通常寫成regex、regexp或RE。在編程語(yǔ)言中,正則表達(dá)式常常用來(lái)簡(jiǎn)化文本處理邏輯,用簡(jiǎn)單字符串來(lái)描述、匹配文本中符合指定格式的全部字符串,以實(shí)現(xiàn)校驗(yàn)數(shù)據(jù)的有效性、查找符合要求的文本以及對(duì)文本進(jìn)行切割和替換等操作。正則表達(dá)式廣泛應(yīng)用于各種領(lǐng)域,特別是文本處理和模式匹配領(lǐng)域。在Linux操作系統(tǒng)中,使用正則表達(dá)式可以輕松地查找和編輯文件內(nèi)容,或者在整個(gè)文件夾中進(jìn)行批量替換操作。正則表達(dá)式是一種用來(lái)描述文本模式的表達(dá)式,正則表達(dá)式使用一系列的字符和特殊符號(hào)來(lái)構(gòu)建模式,可以描述出符合特定格式的字符串。01正則表達(dá)式廣泛應(yīng)用于各種領(lǐng)域,特別是文本處理和模式匹配領(lǐng)域。在Linux操作系統(tǒng)中,使用正則表達(dá)式可以輕松地查找和編輯文件內(nèi)容,或者在整個(gè)文件夾中進(jìn)行批量替換操作。02正則表達(dá)式是一種用來(lái)描述文本模式的表達(dá)式,正則表達(dá)式使用一系列的字符和特殊符號(hào)來(lái)構(gòu)建模式,可以描述出符合特定格式的字符串。正則表達(dá)式又稱規(guī)律表達(dá)式、規(guī)則運(yùn)算式,通常寫成regex、regexp或RE。在編程語(yǔ)言中,正則表達(dá)式常常用來(lái)簡(jiǎn)化文本處理邏輯,用簡(jiǎn)單字符串來(lái)描述、匹配文本中符合指定格式的全部字符串,以實(shí)現(xiàn)校驗(yàn)數(shù)據(jù)的有效性、查找符合要求的文本以及對(duì)文本進(jìn)行切割和替換等操作。正則表達(dá)式正則表達(dá)式元字符正則表達(dá)式由普通字符和元字符兩種類型的字符組成。普通字符指的是除了元字符之外的所有字符,包括字母、數(shù)字、標(biāo)點(diǎn)符號(hào)等基本字符。在正則表達(dá)式中,普通字符表示它本身,即匹配輸入文本中與之完全相同的字符。元字符是正則表達(dá)式中具有特殊含義的字符。它們用于定義模式和進(jìn)行更高級(jí)的匹配。元字符通??梢苑殖梢韵聨追N類型:序號(hào)元字符類型描述1表示單個(gè)特殊字符的元字符這類元字符表示一個(gè)特定的字符,包括英文的點(diǎn)號(hào)(.)、\d、\D、\w、\W、\s、\S等。2表示空白字符的元字符這類元字符表示空格、制表符、換行符等空白字符,包括\n、\r、\t、\f、\v、\s等。3表示某個(gè)范圍的元字符這類元字符表示一個(gè)字符集合中的任意一個(gè)字符,包括|、[...]、[^...]、[a-z]、[A-Z]、[0-9]等。4表示次數(shù)的量詞元字符這類元字符表示一個(gè)字符、子表達(dá)式或字符集合出現(xiàn)的次數(shù),包括*、+、?、{n}、{n,}、{n,m}等。5表示斷言的元字符這類元字符用于邊界限定和條件匹配,包括^、$、\b、\A、\Z、(?<=Y)X、(?<!Y)X等。正則表達(dá)式元字符常見(jiàn)的正則表達(dá)式元字符:序號(hào)元字符描述1.匹配任意單個(gè)字符,除了換行符2*匹配前面的字符0次1次或多次3.*匹配多個(gè)任意字符4+匹配前面的字符1次或多次5?匹配前面的字符0次或1次6^匹配字符串的開(kāi)頭7$匹配字符串的結(jié)尾8|邏輯或,匹配左右任意一邊,即匹配|前后字符9()用來(lái)分組,可以改變優(yōu)先級(jí)或用于后續(xù)的引用10[]匹配方括號(hào)內(nèi)的任意一個(gè)字符,例如[abc]表示匹配a、b、c中的任意一個(gè)字符11[^]匹配否定,對(duì)方括號(hào)中的集合取反12[x-y]匹配連續(xù)的字符串范圍13[^]匹配不在方括號(hào)內(nèi)的任意一個(gè)字符,例如[^abc]表示不匹配a、b、c中的任意一個(gè)字符14{n}匹配前面的字符n次15{n,}匹配前面的字符至少n次16{n,m}匹配前面的字符至少n次,但是不超過(guò)m次17\將下一個(gè)字符標(biāo)記為特殊字符或字面值。例如,n匹配字符n,而\n匹配換行符,\(匹配(,\.匹配點(diǎn)號(hào)02POSIX字符組POSIX字符組POSIX是一個(gè)操作系統(tǒng)接口標(biāo)準(zhǔn),定義了一系列API,以提高軟件在不同UNIX系統(tǒng)上的可移植性。POSIX正則表達(dá)式是一種符合POSIX標(biāo)準(zhǔn)的正則表達(dá)式,其語(yǔ)法相對(duì)簡(jiǎn)單,不包含一些擴(kuò)展的特性,但仍可以滿足基本的字符串匹配和處理需求。POSIX中定義了一些常見(jiàn)的字符集,用于在正則表達(dá)式中匹配特定的字符類型。01POSIX正則表達(dá)式主要分為兩種:基本正則表達(dá)式(BRE)和擴(kuò)展正則表達(dá)式(ERE)。BRE提供了一組限定的元字符,而ERE則包括更多的元字符和功能。02POSIX正則表達(dá)式與非POSIX正則表達(dá)式相比,通常不支持一些高級(jí)擴(kuò)展特性,例如非貪婪匹配和正向/反向先行斷言。但仍然可以滿足許多基本的模式匹配需求。POSIX是一個(gè)操作系統(tǒng)接口標(biāo)準(zhǔn),定義了一系列API,以提高軟件在不同UNIX系統(tǒng)上的可移植性。POSIX正則表達(dá)式是一種符合POSIX標(biāo)準(zhǔn)的正則表達(dá)式,其語(yǔ)法相對(duì)簡(jiǎn)單,POSIX中定義了一些常見(jiàn)的字符集,用于在正則表達(dá)式中匹配特定的字符類型。正則表達(dá)式POSIX字符組常見(jiàn)的POSIX字符集如表:序號(hào)字符集描述1[:alnum:]匹配字母和數(shù)字字符2[:alpha:]匹配字母字符3[:blank:]匹配空格和制表符4[:cntrl:]匹配控制字符5[:digit:]匹配數(shù)字字符6[:graph:]匹配可打印字符,不包括空格7[:lower:]匹配小寫字母字符8[:print:]匹配可打印字符,包括空格9[:punct:]匹配標(biāo)點(diǎn)符號(hào)字符10[:space:]匹配任意空白字符11[:upper:]匹配大寫字母字符12[:xdigit:]匹配十六進(jìn)制數(shù)字字符03grep數(shù)據(jù)過(guò)濾grep數(shù)據(jù)過(guò)濾grep命令是一種常用的文本搜索工具。它可以在文件中查找指定的字符串或正則表達(dá)式,并將匹配的行輸出到標(biāo)準(zhǔn)輸出。grep命令的基本語(yǔ)法如下:grep[options]pattern[file...]其中,pattern表示要查找的字符串或正則表達(dá)式,file表示要搜索的文件。如果省略file,則默認(rèn)搜索標(biāo)準(zhǔn)輸入。grep命令默認(rèn)使用基本正則表達(dá)式),而egrep則支持?jǐn)U展正則表達(dá)式。在基本正則表達(dá)式中,元字符如+、?、|等沒(méi)有特殊含義,需要用\進(jìn)行轉(zhuǎn)義,而在擴(kuò)展正則表達(dá)式中,許多特殊字符可以直接使用,如括號(hào)、加號(hào)、問(wèn)號(hào)等。這使得擴(kuò)展正則表達(dá)式更加簡(jiǎn)潔和易讀。grep數(shù)據(jù)過(guò)濾grep命令使用基本正則表達(dá)式來(lái)匹配模式,它對(duì)正則表達(dá)式中的特殊字符進(jìn)行了簡(jiǎn)化,需要使用反斜線來(lái)轉(zhuǎn)義某些字符,如“+”表示匹配一個(gè)或多個(gè)前導(dǎo)字符。echo"123"|grep'[0-9]\+'#匹配一個(gè)或多個(gè)數(shù)字字符grep命令默認(rèn)情況下不支持元字符的特殊含義,除非使用轉(zhuǎn)義字符進(jìn)行顯式指定。grep-E可以啟用擴(kuò)展正則表達(dá)式進(jìn)行模式匹配,等同于使用egrep命令。echo"123"|grep-E'[0-9]+'#匹配一個(gè)或多個(gè)數(shù)字字符egrep命令使用擴(kuò)展正則表達(dá)式來(lái)匹配模式,它支持更多的元字符和特殊符號(hào),例如“+”表示匹配一個(gè)或多個(gè)前導(dǎo)字符,而不需要使用轉(zhuǎn)義字符。echo"123"|egrep'[0-9]+'#匹配一個(gè)或多個(gè)數(shù)字字符使用grep命令查找文件中包含指定字符串的行:grep"string"file.txtgrep數(shù)據(jù)過(guò)濾使用grep命令查找多個(gè)文件中包含指定字符串的行:grep"string"file1.txtfile2.txt使用grep命令忽略大小寫查找指定字符串:grep-i"string"file.txt使用grep命令查找不包含指定字符串的行:grep-v"string"file.txt使用grep命令輸出匹配到的行數(shù):grep-c"string"file.txt使用grep命令遞歸查找子目錄中包含指定字符串的文件:grep-r"string"/path/to/directory通過(guò)grep命令使用正則表達(dá)式查找:grep-E"pattern"file.txt通過(guò)grep命令使用文件中的模式查找:grep-fpatterns.txtfile.txt謝謝sed流編輯器與awk文本
處理工具任務(wù)2:sed流編輯器目錄/Contents0102sed工作原理sed基本語(yǔ)法01sed工作原理sed最初是由貝爾實(shí)驗(yàn)室的計(jì)算機(jī)科學(xué)家LeeE.McMahon(李·E.麥克馬洪)在1973—1974年開(kāi)發(fā)的。sed這個(gè)名字來(lái)源于“streameditor”,意為流編輯器,它最初在UNIX操作系統(tǒng)中開(kāi)發(fā)和使用,現(xiàn)在也被移植到很多Linux發(fā)行版中。目前,大部分Linux發(fā)行版使用的是由自由軟件基金會(huì)(FreeSoftwareFoundation,F(xiàn)SF)管理和維護(hù)的GNUsed。FSF是一個(gè)非營(yíng)利性組織,致力于推廣自由軟件和開(kāi)放源碼。FSF維護(hù)和發(fā)布了GNUsed,它是一個(gè)免費(fèi)的、開(kāi)源的sed版本,根據(jù)sed的原始設(shè)計(jì)進(jìn)行改進(jìn)和擴(kuò)展,提供了更多的特性和功能。sed工作原理sed工作原理vi、vim這類文本編輯器,需要打開(kāi)文本文件后才能編輯和操作,與vi、vim這些交互式文本編輯器不同,sed是一種非交互式編輯器,它通過(guò)命令行或腳本來(lái)操作文本文件,可對(duì)文本文件進(jìn)行批量替換、提取、過(guò)濾、查找和刪除,而不需要打開(kāi)文件,非常適合用于自動(dòng)化和批量處理。sed借鑒了ed編輯器的語(yǔ)法和許多有用的功能,支持正則表達(dá)式,接收來(lái)自文件和管道的輸入以及來(lái)自標(biāo)準(zhǔn)輸入的輸入。sed按行處理文本,根據(jù)給定的編輯指令對(duì)每一行進(jìn)行匹配和替換操作。它使用模式匹配來(lái)確定需要處理的行,并根據(jù)指定的規(guī)則進(jìn)行相應(yīng)的替換或其他操作。其基本工作流程如下。01sed首先從輸入文本中逐行讀取文本,并將每一行存儲(chǔ)在稱為模式空間(patternspace)的緩沖區(qū)中。02sed檢查模式空間中的行是否與給定的模式匹配,如果匹配成功,則執(zhí)行相應(yīng)的編輯指令。例如s/old/new/g命令用于替換文本中的所有old為new。sed會(huì)將緩沖區(qū)中的文本作為輸入,執(zhí)行編輯命令,并將結(jié)果存儲(chǔ)在輸出緩沖區(qū)中。03如果編輯命令是s,則sed會(huì)將輸出緩沖區(qū)中的結(jié)果寫回到緩沖區(qū)中,覆蓋原有的文本。如果編輯命令是其他命令,例如d、p、a等,則sed會(huì)將輸出緩沖區(qū)中的結(jié)果輸出到標(biāo)準(zhǔn)輸出或指定的文件中。04sed處理完當(dāng)前行后,將結(jié)果輸出到標(biāo)準(zhǔn)輸出。如果指定了輸出文件,則可以將結(jié)果寫入文件。05如果還有未處理的文本行,繼續(xù)處理下一行。重復(fù)上述步驟,直到處理完所有的文本行。sed工作流程02sed基本語(yǔ)法sed基本語(yǔ)法sed是一種流編輯器,常用于在命令行中對(duì)文本進(jìn)行處理和替換。它按照行處理輸入文本,根據(jù)給定的編輯指令進(jìn)行匹配和替換操作,并將結(jié)果輸出到標(biāo)準(zhǔn)輸出。sed支持正則表達(dá)式以及模式匹配和替換功能。其基本語(yǔ)法如下:其中,options表示sed的選項(xiàng),例如-n、-i、-f等。files表示要編輯的文件,如果沒(méi)有指定文件,也可以從標(biāo)準(zhǔn)輸入讀取文本。command表示sed的命令,也可以理解成編輯指令。命令使用一對(duì)引號(hào)標(biāo)識(shí),可以是單個(gè)命令或由多個(gè)命令組成,多個(gè)命令之間用分號(hào)隔開(kāi)。sed命令基本示例如下:其中,s是命令,表示替換;old_string是要被替換的字符串或正則表達(dá)式的模式;new_string是替換后的新字符串;g是替換標(biāo)志,即替換所有匹配到的字符串;file.txt是要進(jìn)行替換操作的目標(biāo)文件。sed[options]'command'filessed's/old_string/new_string/g'file.txtsed選項(xiàng)sed選項(xiàng)可以控制sed的運(yùn)行方式,改變sed的工作流程。常用的sed選項(xiàng)下表所示。序號(hào)選項(xiàng)描述1-n不自動(dòng)輸出模式空間的內(nèi)容,用于禁止自動(dòng)輸出模式空間的內(nèi)容,通常配合p命令使用來(lái)輸出指定行。示例:sed-n'2p'file.txt2-e允許在同一個(gè)sed命令中使用多個(gè)子命令。示例:sed-e's/old_string/new_string/g'-e'3d'file.txt3-f將命令保存在文件中。使用-f選項(xiàng)來(lái)讀取命令,可避免在命令行中使用很長(zhǎng)的命令。示例:sed-fcommands.txtfile.txt4-i直接修改文件,而不是將結(jié)果輸出到標(biāo)準(zhǔn)輸出。示例:sed-i's/old_string/new_string/g'file.txt5-r使用擴(kuò)展正則表達(dá)式。示例:sed-r's/([a-z]+)([0-9]+)/\2\1/g'file.txt6-h顯示幫助信息。示例:sed-hsed命令sed命令分為兩類,分別是地址指令和動(dòng)作指令。常用的sed指令下表所示。地址指令,也稱為定位指令,用于指定要應(yīng)用動(dòng)作指令的文本行范圍,可以使用數(shù)字、正則表達(dá)式、first~step語(yǔ)法等。地址指令可以單獨(dú)使用,也可以與動(dòng)作指令一起使用。動(dòng)作指令,用于對(duì)已定位的文本行進(jìn)行操作,包括刪除、修改、添加、輸出等。動(dòng)作指令必須與地址指令配合使用才能生效。序號(hào)指令描述1p輸出指定行或匹配行。示例:sed-n'2,4p'file.txt2=輸出行號(hào)。示例:sed'3='file.txt3a在指定行之后追加文本。示例:sed'2aNewline'file.txt4c用新文本替換匹配的行。示例:sed'/RHEL/cUbuntuLinux'file.txt5d刪除匹配的行。示例:sed'3d'file.txt6i在指定行之前插入文本。示例:sed'3i\headertext'file.txt7a在指定行之后應(yīng)用動(dòng)作指令。示例:sed'3a\append_string'file.txt8s將匹配的文本替換為指定內(nèi)容。示例:sed's/RHEL/rhel9/g'file.txt9y將模式空間中的字符替換成指定的字符,比如y/source-chars/target-chars/,其中source-chars和target-chars的長(zhǎng)度必須相同。示例:sed'y/RHEL/cent/'file.txt10r從指定文件中讀取內(nèi)容,并將內(nèi)容插入指定行之后。示例:sed'/OpenEuler/rfile.txt'file1.txt11w將匹配的行寫入指定文件。示例:sed-n'/RHEL/woutput.txt'file1.txt12q退出sed。示例:sed'3q'file.txtsed數(shù)據(jù)定位方法在sed中,可以使用數(shù)字和正則表達(dá)式來(lái)精確選擇要操作的文本行,數(shù)字通常用于定位文件中的行號(hào),正則表達(dá)式則可以用來(lái)匹配符合特定模式的文本。常用的sed數(shù)據(jù)定位方法如下表所示。序號(hào)數(shù)據(jù)定位方法描述1number直接根據(jù)行號(hào)匹配。示例:sed-n'3p'file.txt2first~step從第first行開(kāi)始,每隔step行進(jìn)行操作。示例:sed-n'3~2p'file.txt3$匹配最后一行。示例:sed-n'$p'file.txt4/regexp/匹配正則表達(dá)式regexp的行。示例:sed-n'/Open/p'file.txt、sed'/^Open/d'file.txt5addr1,addr2匹配從addr1行到addr2行范圍內(nèi)的行,addr1和addr2可以是數(shù)字、正則表達(dá)式或first~step語(yǔ)法。示例:sed-n'3,5p'file.txt,sed'/Ubuntu/,/Open/d'file1.txt6addr,+N匹配從addr開(kāi)始,連續(xù)N行,addr可以是數(shù)字、正則表達(dá)式或first~step語(yǔ)法。示例:sed-n'3,+2p'file.txt,sed'/Ubuntu/,+3d'file謝謝sed流編輯器與awk文本
處理工具任務(wù)3:awk文本處理工具目錄/Contents010203awk工作流程awk基本語(yǔ)法awk內(nèi)置變量04在awk中使用條件和循環(huán)語(yǔ)句05在awk中使用數(shù)組06編寫并執(zhí)行awk腳本07awk函數(shù)01awk工作流程awk工作流程awk是一種強(qiáng)大的文本處理工具。在Linux和UNIX環(huán)境中,awk可提供包括正則表達(dá)式匹配、流程控制語(yǔ)句、數(shù)學(xué)運(yùn)算符、內(nèi)置變量和函數(shù)等文本處理功能。使用awk,用戶可以方便地處理文本數(shù)據(jù),完成模式匹配、數(shù)據(jù)操作、計(jì)算和生成報(bào)表等各種任務(wù)。Unifiedfontsmakereadingmorefluent01讀取輸入:awk從指定的輸入文件或標(biāo)準(zhǔn)輸入逐行讀取數(shù)據(jù)。02分割記錄:每行數(shù)據(jù)被分割成一系列字段,字段默認(rèn)使用空格作為分隔符,但可以通過(guò)修改內(nèi)置變量FS(字段分隔符)來(lái)自定義分隔符。每個(gè)字段可以通過(guò)$1,$2,$3,...來(lái)引用,分別表示第一個(gè)、第二個(gè)、第三個(gè)字段,以此類推。03模式匹配:awk逐行遍歷記錄,并將每一行的數(shù)據(jù)與用戶定義的規(guī)則中的模式進(jìn)行匹配。規(guī)則由模式和關(guān)聯(lián)的動(dòng)作組成。04執(zhí)行動(dòng)作:當(dāng)模式匹配成功時(shí),awk執(zhí)行與該規(guī)則關(guān)聯(lián)的動(dòng)作。動(dòng)作可以是一個(gè)簡(jiǎn)單的命令,也可以是一系列復(fù)雜的操作。05處理下一行:在完成當(dāng)前行的處理后,awk繼續(xù)讀取下一行數(shù)據(jù),重復(fù)上述過(guò)程,直到處理完所有輸入數(shù)據(jù)。06輸出結(jié)果:根據(jù)規(guī)則中定義的動(dòng)作,將處理結(jié)果輸出到標(biāo)準(zhǔn)輸出或其他指定的輸出文件。輸出可以包括整行記錄或記錄的特定字段,具體內(nèi)容取決于規(guī)則中的動(dòng)作。awk工作流程awk的工作流程包括從輸入文件中逐行讀取數(shù)據(jù),對(duì)每一行應(yīng)用事先定義好規(guī)則(模式和動(dòng)作),并輸出結(jié)果,具體工作流程如下。02awk基本語(yǔ)法awk基本語(yǔ)法awk基本語(yǔ)法由一系列由花括號(hào)標(biāo)識(shí)的模式和動(dòng)作組成,其中模式用于匹配輸入數(shù)據(jù),動(dòng)作則用于處理匹配的數(shù)據(jù)。其基本語(yǔ)法如下:
awk'pattern{action}'file其中,file表示要處理的文件,如果省略輸入文件,awk會(huì)從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù);pattern表示匹配文本的模式,可以是條件或規(guī)則,用于匹配輸入數(shù)據(jù)的某種特征;當(dāng)輸入數(shù)據(jù)符合指定的模式時(shí),執(zhí)行對(duì)應(yīng)的action表示的動(dòng)作??梢杂卸鄠€(gè)“模式-動(dòng)作”組合,每個(gè)組合占據(jù)一行或多行。awk模式和動(dòng)作結(jié)構(gòu)awk程序由一個(gè)或多個(gè)模式及與之關(guān)聯(lián)的動(dòng)作語(yǔ)句組成。多個(gè)操作模式語(yǔ)句由換行符分隔,并使用花括號(hào)進(jìn)行界定,基本結(jié)構(gòu)如下:其中,pattern1表示第1個(gè)模式,action1表示與之關(guān)聯(lián)的動(dòng)作,pattern2和action2表示第二個(gè)模式及與之關(guān)聯(lián)的動(dòng)作,以此類推。程序會(huì)按照awk模式和動(dòng)作的順序逐行讀取輸入,對(duì)每一行依次檢查模式,如果模式匹配成功,則執(zhí)行與之關(guān)聯(lián)的動(dòng)作。模式可以是正則表達(dá)式、關(guān)系表達(dá)式、條件表達(dá)式等,動(dòng)作可以是輸出、變量賦值、流程控制、內(nèi)置函數(shù)調(diào)用等操作。pattern1{action1}pattern2{action2}...patternN{actionN}awk命令選項(xiàng)awk命令可以使用選項(xiàng)和模式來(lái)修改其行為和提供額外的功能。常見(jiàn)的awk命令選項(xiàng)或模式元素如表所示:序號(hào)選項(xiàng)或模式元素描述1-F用于指定字段分隔符,默認(rèn)為空格。示例:awk-F':''{print$1}'/etc/passwd2-v用于設(shè)置變量的值。示例:awk-vname="John"'{print"Hello,"name"!"}'file.txt3-f用于指定awk腳本文件。示例:awk-fscript.awkfile.txt4''用于引用代碼塊。示例:awk'$1>3{print$1}'array-number.txt5//用于指定正則表達(dá)式。示例:awk'/[0-9]/{print$2}'file.txt6{}定義awk程序中的動(dòng)作部分,可以包含一個(gè)或多個(gè)命令,也可以是一個(gè)復(fù)雜的代碼塊。示例:awk'{if($1>2){print$1;count++}}'array-number.txt7BEGIN在讀取文本文件之前執(zhí)行的模式,用于進(jìn)行初始化操作或設(shè)置變量。BEGIN模式只執(zhí)行一次,通常用于執(zhí)行一些預(yù)處理任務(wù),可以用于輸出標(biāo)題、設(shè)置計(jì)數(shù)器、加載配置等任務(wù)。示例:awk'BEGIN{print"Startoftheprogram"}{print$0}'file.txt8END在讀取文本文件之后執(zhí)行的模式,awk程序執(zhí)行結(jié)束之后執(zhí)行,用于進(jìn)行總結(jié)、輸出統(tǒng)計(jì)結(jié)果等操作。END模式只執(zhí)行一次,通常用于執(zhí)行一些收尾任務(wù),可以用于輸出總計(jì)、計(jì)算均值、輸出最終結(jié)果等任務(wù)。示例:awk'{line_count+=1}END{print"Linecount:"line_count}'file.tx03awk內(nèi)置變量awk內(nèi)置變量awk內(nèi)置變量是預(yù)定義的變量,這些變量用于訪問(wèn)和操作輸入數(shù)據(jù)的不同屬性和上下文信息。內(nèi)置變量可在awk中直接使用,通常以大寫字母表示。常見(jiàn)的awk內(nèi)置變量如表所示:序號(hào)內(nèi)置變量描述1FILENAME當(dāng)前正在處理的文件。示例:awk'{printFILENAME}'file1.txtfile2.txt2NF當(dāng)前輸入行的字段數(shù)量。示例:awk'{printNF}'file.txt3$NF當(dāng)前輸入行的最后一個(gè)字段的值。示例:awk'{print$NF}'file.txt4NR當(dāng)前行的行號(hào)(記錄號(hào))。示例:awk'{printNR,$0}'file.txt5FNR當(dāng)前輸入文件中的行號(hào)。示例:awk'{printFNR,$0}'file.txt6FS指定輸入行中字段之間的分隔符,默認(rèn)是空格或水平制表符。示例:awk-F':''{print$1,$2}'/etc/passwd7$0當(dāng)前輸入行的完整內(nèi)容,即整行文本。示例:awk'{print$0}'file.txt8$n當(dāng)前輸入行的第n個(gè)字段的值。示例:awk'{print$2}'file.txt9OFS輸出字段分隔符,默認(rèn)為空格。示例:awk'BEGIN{OFS=","}{print$1,$2}'file.txt10ORS輸出記錄分隔符,用于指定輸出時(shí)記錄之間的分隔符,默認(rèn)為換行符。示例:awk'BEGIN{ORS="\n---\n"}{print$0}'file.txt11ARGC命令行參數(shù)的數(shù)量。示例:awk'BEGIN{printARGC}'file.txt12ARGV包含命令行參數(shù)的數(shù)組,每個(gè)元素對(duì)應(yīng)一個(gè)命令行參數(shù)。示例:awk'BEGIN{printARGV[1]}'file.txt04在awk中使用條件和循環(huán)語(yǔ)句awk條件語(yǔ)句awk中的條件判斷通常使用if語(yǔ)句來(lái)實(shí)現(xiàn),if語(yǔ)句根據(jù)給定的條件決定是否執(zhí)行某個(gè)代碼塊。awk條件基本語(yǔ)法:if(條件){
代碼塊}#文本文件data.txt內(nèi)容:JohnDoe4500JaneSmith5500AlexJohnson5000#找出薪水大于5000的員工。awk'{if($3>5000)print$0}'data.txtif語(yǔ)句示例:{if($3>5000)print$0}:這是一個(gè)awk的動(dòng)作塊。if($3>5000):if語(yǔ)句檢查第三個(gè)字段(由$3表示)是否大于5000。print$0:如果條件為真(即薪水大于5000),則執(zhí)行print$0命令,打印出當(dāng)前行的內(nèi)容($0代表整行數(shù)據(jù))。awk循環(huán)語(yǔ)句for(初始化語(yǔ)句;條件;遞增語(yǔ)句){
代碼塊}awk中的循環(huán)語(yǔ)句允許多次執(zhí)行一組語(yǔ)句,以實(shí)現(xiàn)重復(fù)操作。awk支持for和while兩種類型的循環(huán)語(yǔ)句。for循環(huán)語(yǔ)句的基本語(yǔ)法:for語(yǔ)句示例#假設(shè)輸入的內(nèi)容是數(shù)字,每個(gè)數(shù)字占一行awk'{count[$1]++#為每個(gè)遇到的數(shù)字增加計(jì)數(shù)}END{for(numincount){#遍歷數(shù)組
printnum,count[num]#打印數(shù)字及其出現(xiàn)次數(shù)
}}'count[$1]++:表示使用數(shù)組count來(lái)記錄每個(gè)數(shù)字(由$1表示,即每行的第一個(gè)字段)出現(xiàn)的次數(shù)。每次遇到一個(gè)數(shù)字,就在其對(duì)應(yīng)的數(shù)組索引處增加計(jì)數(shù)。for(numincount):在腳本的END塊中,for循環(huán)遍歷數(shù)組count。num是當(dāng)前的鍵(本例中是數(shù)字),而count[num]是該鍵對(duì)應(yīng)的值(即數(shù)字出現(xiàn)的次數(shù))。printnum,count[num]:對(duì)于數(shù)組中的每個(gè)元素,打印出數(shù)字(鍵)和出現(xiàn)次數(shù)(值)。在awk中使用條件和循環(huán)語(yǔ)句while(條件){
代碼塊}while語(yǔ)句的基本語(yǔ)法:while語(yǔ)句示例:awk'BEGIN{print"Enternumbers(enter0tostop):"}{while($1!=0){print"Youentered:",$1getline#讀取下一行輸入
}print"Encountered0,stopping."exit#遇到0,退出程序}'BEGIN塊中的print命令提供了一個(gè)簡(jiǎn)單的提示,告知用戶如何操作。while($1!=0):while循環(huán)檢查當(dāng)前行的第一個(gè)字段($1)是否不等于0。只要這個(gè)條件為真,循環(huán)就會(huì)繼續(xù)執(zhí)行。print"Youentered:",$1:打印用戶輸入的內(nèi)容。getline:是awk的一個(gè)內(nèi)置函數(shù),用于從標(biāo)準(zhǔn)輸入讀取下一行數(shù)據(jù)到當(dāng)前記錄中。使得$1更新為新行的第一個(gè)字段。print"Encountered0,stopping."和exit:一旦遇到0,輸出一條消息并使用exit命令退出程序。05在awk中使用數(shù)組在awk中使用數(shù)組在awk中,數(shù)組是一種用于存儲(chǔ)和操作數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),可以通過(guò)索引訪問(wèn)和操作元素,這使得處理數(shù)據(jù)更加靈活和高效。普通數(shù)組示例:#單行模式awk'BEGIN{my_array[1]="openeuler";my_array[2]="rhel";my_array[3]="centos";for(iinmy_array)printmy_array[i];}'#多行模式awk'BEGIN{my_array[1]="openeuler";my_array[2]="rhel";my_array[3]="centos";for(iinmy_array)printmy_array[i];}'單行模式中my_array[1]="openeuler";-將數(shù)組的第一個(gè)元素設(shè)置為字符串"openeuler"。my_array[2]="rhel";-將數(shù)組的第二個(gè)元素設(shè)置為字符串"rhel"。my_array[3]="centos";-將數(shù)組的第三個(gè)元素設(shè)置為字符串"centos"。多行模式中for(iinmy_array)使用for循環(huán)遍歷數(shù)組中的每個(gè)元素。i是數(shù)組索引,對(duì)于每個(gè)索引,循環(huán)內(nèi)的命令會(huì)被執(zhí)行。printmy_array[i];-在循環(huán)體內(nèi),這條命令用于打印當(dāng)前索引i對(duì)應(yīng)的數(shù)組元素的值。在awk中使用數(shù)組關(guān)聯(lián)數(shù)組示例:awk'BEGIN{#聲明并初始化關(guān)聯(lián)數(shù)組
os["hauwei_openeuler_version"]=22;os["redhat_rhel_version"]=9;os["centos_stream_version"]=9;#訪問(wèn)和輸出數(shù)組元素
print"Versionofopeneuler:",os["hauwei_openeuler_version"];print"Versionofrhel:",os["redhat_rhel_version"];print"Versionofcentos:",os["centos_stream_version"];}’#輸出結(jié)果Versionofopeneul
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)補(bǔ)血用藥市場(chǎng)全面調(diào)研及行業(yè)投資潛力預(yù)測(cè)報(bào)告
- 2024腈綸行業(yè)市場(chǎng)分析報(bào)告
- 2024-2030年中國(guó)包裝裝潢行業(yè)市場(chǎng)調(diào)查研究及投資前景展望報(bào)告
- 玻璃膏霜瓶項(xiàng)目可行性研究報(bào)告(目錄)
- VOC檢測(cè)VOCs含量第三方檢測(cè)報(bào)告2025
- 布袋彈簧床芯項(xiàng)目可行性研究報(bào)告
- 2025年中國(guó)冬蟲(chóng)夏草行業(yè)投資潛力分析及行業(yè)發(fā)展趨勢(shì)報(bào)告
- 2025年光纖熔接機(jī)項(xiàng)目可行性研究報(bào)告
- 2025國(guó)際貿(mào)易進(jìn)口合同范本
- 2025粉煤灰供應(yīng)合同
- (2024年)長(zhǎng)歌行漢樂(lè)府古詩(shī)PPT語(yǔ)文課件
- GB/T 43674-2024加氫站通用要求
- 倉(cāng)庫(kù)班長(zhǎng)年終總結(jié)及工作計(jì)劃
- 部編人教版二年級(jí)勞動(dòng)教育上冊(cè)期末試卷(帶答案)
- 肛門手術(shù)的鎮(zhèn)痛研課件
- 中山醫(yī)院報(bào)告查詢app
- 檢驗(yàn)科質(zhì)控總結(jié)匯報(bào)
- 《如何做好中層》課件
- 破產(chǎn)法培訓(xùn)課件銀行
- 山東大學(xué)《高級(jí)語(yǔ)言程序設(shè)計(jì)》2022-2023學(xué)年期末試卷
- 智能陽(yáng)臺(tái)種菜項(xiàng)目計(jì)劃書
評(píng)論
0/150
提交評(píng)論