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

Grep命令用於查找文件中的特定模式,並輸出包含搜索模式的所有結果。

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

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

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

sed命令對修改文件最有用,它搜索匹配的模式並替換它們並輸出結果。

在Linux中使用Grep命令

Grep命令用於查找文件中的特定模式並顯示與該模式匹配的所有字段。搜索的模式通常是正則表達式。

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

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

GREP查找最後一個字符_sed

 

 

 要在文件中輸出每個包含“linuxmi”一詞的字段:

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

GREP查找最後一個字符_linux_02

 

 

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

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

grep -c "linuxmi" linuxmi.txt

GREP查找最後一個字符_搜索_03

 

 

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

 它顯示了特定的文件和匹配結果

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

GREP查找最後一個字符_搜索_04

 

 

要在搜索中包含子目錄,請使用“ -r”,如下所示:

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

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

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

GREP查找最後一個字符_sed_05

 

 

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

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

GREP查找最後一個字符_GREP查找最後一個字符_06

 

 

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

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

GREP查找最後一個字符_sed_07

 

 

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

GREP查找最後一個字符_linux_08

 

 

匹配以給定字符串結尾的行。“ $”正則表達式表示行的結尾,可用於匹配以特定字符串結尾的行。在本例中,我們注意匹配以“ 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查找最後一個字符_linux_09

 

 

為了將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

GREP查找最後一個字符_sed_10

在Linux中使用AWK命令

Awk命令更多是用於處理數據和生成報告的腳本語言。它不需要任何編譯,並且用户可以使用數字函數,變量,字符串函數和邏輯運算符。

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

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

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

如何在Linux中使用AWK命令

默認情況下,Awk命令用於打印文件的內容。在本例中,沒有指定模式,因此操作應用於文件的每一行。

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

GREP查找最後一個字符_搜索_11

 

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

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

 

 

GREP查找最後一個字符_sed_12

Awk用於將一行分割成多個字段並打印出內容。讓我們打印linuxmi.txt文件中行的第一部分和第二部分。

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

GREP查找最後一個字符_GREP查找最後一個字符_13

 

 注意$0輸出整行。

NR - 打印行以及行號。

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

GREP查找最後一個字符_linux_14

 

 也可以用於指定從某個數字打印到另一個數字。讓我們顯示從第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命令的指南。