1. 程式人生 > 其它 >Linux三劍客之grep,awk,sed命令必知必會

Linux三劍客之grep,awk,sed命令必知必會

Linux中的Grep,Awk和Sed命令之間有什麼區別?

Grep命令用於查詢檔案中的特定模式,並輸出包含搜尋模式的所有結果。

另一方面,Awk也用於在檔案中搜索某些模式,但會繼續在模式匹配上執行某些任務。

可以同時使用Grep和awk來縮小搜尋增強結果的範圍。

Grep是用於快速搜尋匹配模式的簡單工具,但是awk更像是一種程式語言,用於處理檔案並根據輸入值生成輸出。

sed命令對修改檔案最有用,它搜尋匹配的模式並替換它們並輸出結果

在Linux中使用Grep命令

Grep命令用於查詢檔案中的特定模式並顯示與該模式匹配的所有欄位。搜尋的模式通常是正則表示式。

在我的示例中,我有一個名為linuxmi的檔案,如下所示:

linuxmi@linuxmi:~/www.linuxmi.com$ cat linuxmi.txt

要在檔案中輸出每個包含“linuxmi”一詞的欄位

linuxmi@linuxmi:~/www.linuxmi.com$ grep -i "linuxmi" linuxmi.txt

上面命令中的“ -i”告訴grep命令忽略任何區分大小寫的命令。

“ -c”輸出檔案中匹配模式出現次數的計數。

linuxmi@linuxmi:~/www.linuxmi.com$grep -c "linuxmi" linuxmi.txt

要從包含特定模式的目錄中的所有檔案中搜索,我們使用'*'

它顯示了特定的檔案和匹配結果

linuxmi@linuxmi:~/www.linuxmi.com$grep "linuxmi" *

要僅輸出包含匹配模式的檔案,我們使用“ -l”

如果您知道檔名可以輸出所有匹配項,則還可以指定檔名。

grep "linuxmi" test test1 test2

匹配檔案中的整個單詞。

預設情況下,即使在子字串中找到了Grep,也會輸出所有出現的某種特定模式。

為了僅匹配整個單詞,我們使用“ -w”標誌

linuxmi@linuxmi:~/www.linuxmi.com$grep -w "linuxmi" linuxmi.txt

要在搜尋中包含子目錄,請使用“ -r”

,如下所示:

linuxmi@linuxmi:~/www.linuxmi.com$grep -r "linuxmi" *

僅輸出匹配的模式Grep顯示包含匹配模式的整個句子。我們只能使用'-o'字串來顯示搜尋模式。

linuxmi@linuxmi:~/www.linuxmi.com$grep -o "linuxmi" linuxmi.txt

帶數字的輸出是使用'-n'的匹配模式。這將顯示檔案中匹配模式所在的特定數字計數。

linuxmi@linuxmi:~/www.linuxmi.com$grep -n "linuxmi" linuxmi.txt

反轉匹配以使用'-v'顯示不匹配輸入模式的輸出在這種情況下,我們將輸出不包含單詞“linuxmi”的其他任何內容。

linuxmi@linuxmi:~/www.linuxmi.com$grep -v "linuxmi" linuxmi.txt

匹配以某個字串開頭的所有欄位,例如,輸出所有以單詞“sat”開頭的欄位

匹配以給定字串結尾的行“ $”正則表示式表示行的結尾可用於匹配以特定字串結尾的行。在本例中,我們注意匹配以“ 0”結尾的行。

linuxmi@linuxmi:~/www.linuxmi.com$grep "0$" linuxmi.txt

顯示匹配前後的行數

  • -A -指定匹配後要顯示的行數
  • -B -指定要顯示的行數
  • -C -指定匹配之前和之後要顯示的行數

使用“ -e”在同一行中指定多個匹配模式

linuxmi@linuxmi:~/www.linuxmi.com$grep -e "linuxmi" -e "ubuntu" -e "fedora" linuxmi.txt

為了將grep輸出限制在行數以內,我們使用' -m '

linuxmi@linuxmi:~/www.linuxmi.com$grep -m1 "linuxmi" linuxmi.txt

Manny linuxmi account 49000

linuxmi@linuxmi:~/www.linuxmi.com$grep -m2 "linuxmi" linuxmi.txt

Manny linuxmi account 49000
tarun linuxmi sales 15000

在Linux中使用AWK命令

Awk命令更多是用於處理資料和生成報告的指令碼語言它不需要任何編譯,並且使用者可以使用數字函式,變數,字串函式和邏輯運算子。

它使您能夠以語句形式編寫簡單有效的程式以在檔案中搜索特定模式,並在找到匹配項時執行操作

當使用'awk'時,我們將花括號括起來。

模式和動作都形成規則,整個awk程式都用單引號引起來。

如何在Linux中使用AWK命令

預設情況下,Awk命令用於列印檔案的內容。在本例中,沒有指定模式,因此操作應用於檔案的每一行

linuxmi@linuxmi:~/www.linuxmi.com$awk '{print}' linuxmi.txt

例如,要列印與給定模式匹配的行,讓我們列印其中包含單詞“linuxmi”的所有行

linuxmi@linuxmi:~/www.linuxmi.com$awk '/linuxmi/'{print}' linuxmi.txt

Awk用於將一行分割成多個欄位並打印出內容。讓我們列印linuxmi.txt檔案中行的第一部分和第二部分。

linuxmi@linuxmi:~/www.linuxmi.com$awk '{print $1,$2}' linuxmi.txt

注意$0輸出整行

NR -列印行以及行號。

linuxmi@linuxmi:~/www.linuxmi.com$awk '{print NR,$0}' linuxmi.txt

也可以用於指定從某個數字列印到另一個數字讓我們顯示從第3行到第6行。

NF -輸出每個記錄(行)中包含的欄位數

linuxmi@linuxmi:~/www.linuxmi.com$awk 'NR==3, NR==6 {print NR,$0}' linuxmi.txt

$ NF -列印最後一列

linuxmi@linuxmi:~/www.linuxmi.com$awk '{print NF}' linuxmi.txt

OFS -輸出欄位分隔符–用於指定輸出值的分隔符。

linuxmi@linuxmi:~/www.linuxmi.com$awk 'OFS="/" {print $1,$4}' linuxmi.txt

Awk BEGIN和END規則

BEGIN規則應該在任何文字處理之前執行一次,並且在執行其他任何操作之前先執行。

新增模式

大於的值的輸出。例如,在我們的檔案中,最後一個欄位表示薪水數字,我們只需要在值大於35000時輸出

linuxmi@linuxmi:~/www.linuxmi.com$awk '$NF>=35000 {print $1,$4}' linuxmi.txt

內建函式

awk帶有內建函式,例如數值,如下所示

linuxmi@linuxmi:~/www.linuxmi.com$awk 'BEGIN{print sqrt(400)}'

20

Awk指令碼

如果發現自己編寫了複雜的awk命令,則可以選擇將它們放在指令碼檔案(.awk)中並從那裡執行它們。

在Linux中使用SED命令

SED是流編輯器(stream editor)的縮寫

它可以用於執行不同的功能,例如搜尋,查詢和替換,插入和刪除

但是,查詢和替換很常見,您無需開啟檔案即可替換單詞。

將測試檔案中的“linuxmi”一詞替換為“xxvi”並輸出結果:

linuxmi@linuxmi:~/www.linuxmi.com$sed 's/linuxmi/xxvi/' linuxmi.txt

為了替換每次出現,我們在表示式的末尾新增“ g”如下所示

linuxmi@linuxmi:~/www.linuxmi.com$sed 's/linuxmi/xxvi/g' linuxmi.txt

要僅替換特定數量的出現次數,請在'g'處指定數字。例如,最多替換第四行:

linuxmi@linuxmi:~/www.linuxmi.com$sed 's/linuxmi/xxvi/4' linuxmi.txt

要從某個特定位置替換為檔案的其餘部分,請指定以數字開頭的數字和'g'來表示檔案的全部或其餘部分

linuxmi@linuxmi:~/www.linuxmi.com$sed 's/linuxmi/xxvi/4g' linuxmi.txt

要僅替換特定行,請在下面的第三行中指定要替換的檔案行。

linuxmi@linuxmi:~/www.linuxmi.com$sed '3 s/linuxmi/xxvi/' linuxmi.txt

要僅列印替換的行而不是列印所有檔案內容:

linuxmi@linuxmi:~/www.linuxmi.com$sed -n 's/linuxmi/xxvi/p' linuxmi.txt

從某一行開始更換,例如,從第3行到最後

linuxmi@linuxmi:~/www.linuxmi.com$sed '3,g s/linuxmi/xxvi/' linuxmi.txt

使用SED刪除檔案的行。例如,要刪除檔案的第5行:

linuxmi@linuxmi:~/www.linuxmi.com$sed '5d' linuxmi.txt

要刪除最後一行:

linuxmi@linuxmi:~/www.linuxmi.com$sed '$d' linuxmi.txt

從第n行開始刪除到最後,例如,從第3行到最後:

linuxmi@linuxmi:~/www.linuxmi.com$sed '3,$d' linuxmi.txt

要刪除模式匹配檔案:

linuxmi@linuxmi:~/www.linuxmi.com$sed '/pattern/d' linuxmi.txt

這就是我們有關如何在Linux中使用Grep,Awk和Sed命令的指南。

參考:https://www.linuxmi.com/linux-grep-awk-sed.html