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