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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM