grep的 它是GNU / Linux命令行上最常用的工具之一。 儘管它是一個非常簡單的工具,但它允許您執行大量操作。 它特別與管道一起使用,以便能夠在先前命令的輸出等中定位特定點。 但是還有一個稱為egrep的工具,等效於使用-E選項運行grep。
e來自“擴展的正則表達式”,這是激活-E選項的功能,默認情況下,您在egrep中具有的功能而不使用該選項。 也就是說,您可以使用 擴展正則表達式。 在本教程中,我將不解釋正則表達式是什麼,如何使用它們以及* nix中的類型。 我將僅展示一些可以使用egrep進行的有用操作的實際示例...
grep,egrep和fgrep相似。 實際上,egrep等效於grep -E,fgrep等效於grep -F。 也就是說,在涉及到我們的情況下,它也會將模式解釋為正則表達式。
您 搜索行或單詞 在一個或多個文件中,grep也是如此。 例如,假設您要在名為snap.txt的文件以及當前目錄中的所有.txt文件中搜索ubuntu詞:
egrep ubuntu snap.txt
egrep ubuntu *.txt
搜索也可以 遞歸的 要搜索當前目錄的全部內容:
egrep -r "hola mundo" *
到目前為止,已經搜索了精確的單詞或字符串,即考慮到了大小寫(區分大小寫),但是如果要以不區分大小寫的方式進行搜索, 無論是大寫還是小寫,則可以使用以下內容(如果添加w只會找到完全匹配項):
egrep -i "ejemplo" documento.txt
egrep -iw "ejemplo" documento.txt
顯示,不是巧合,而是 找到這些匹配項的文件名:
egrep -l hola *.txt
僅顯示圖案或文字 在文檔中搜索:
egrep -o printf hola.c
請記住,您可以利用所有可以想像的可能性。 您可以合併先前看到的幾個選項,也可以用其他選項(例如-A n和-B n)進行補充,其中n 您要在(之前)之前和之後(之後)顯示的行數 或同時在兩者(C)中顯示,以了解比賽周圍的情況:
egrep -A 2 "printf" hola.c
egrep -B 2 "printf" hola.c
egrep -C 2 printf hola.c
禁止包含匹配項的行,僅顯示不匹配的行:
egrep -v "dos" números.doc
或者,如果您願意,可以使用 多個單詞或與-e匹配。 例如:
egrep -v -e "uno" -e "dos" -e "tres" números.txt
如果您使用 -c只能計算匹配數,或使用-v反轉以顯示不匹配的行數。 例如:
egrep -c "include" main.c
egrep -v -c "include" main.c
乃至 顯示行號 匹配發生的位置以及它分別佔據的位置:
egrep -n "void" hola.c
egrep -o -b "printf" hola.c
以及 常用表達 它的功能可以擴展。 例如,找到以Hello開頭並以bye結尾的行,或者以Hello開頭的行,後跟任意一行,然後分別出現匹配bye:
*更正以下命令:由於讀者Manuel Alcocer的評論,由於出現錯誤,我得以修改以下命令。
egrep '^Hola.*adiós$' ejemplo.txt
egrep "Hola.*adiós" ejemplo.txt
但是,如果您想知道與grep的區別,那麼以下示例將使您很清楚...如果在不帶-E的情況下使用grep,則應使用 轉義序列 這樣就可以解釋特殊字符,否則就可以不考慮特殊字符就解釋模式。 另一方面,使用egrep或grep -E會將它們考慮在內。 例如:
grep '^no\(fork\|group\)' /etc/group
那等於:
grep -E '^no(fork|group)' /etc/group
egrep '^no(fork|group)' /etc/group
也就是說,它將查找以nofork或nogroup開頭的匹配行。 但是,如果您使用的是grep的第一個表達式而不包含轉義序列,那麼它將執行搜索 具體模式 否(前叉|組):
grep 'no(fork|group)' /etc/group
您也可以搜尋 字母數字範圍或特定值,例如查找某些IP:
cat /etc/networks | egrep "192.168.1.[5-9]"
cat /etc/networks | egrep "192.168.[1-3].[5-9]"
cat /etc/networks | egrep "192.168.1.[0-3]|[5-9]"
egrep 192.168.4.[10,40] networks
如果願意,可以使用其他正則表達式進行更具體的搜索。 例如找一個 巧合或其他:
egrep -i '^(printf|scanf)' hola.c
您甚至可以找到 大寫,小寫,僅字母字符或字母數字等。,使用其他表達式,例如:[:alnum:],[:alpha:],[:digit:],[:lower:],[:print:],[:punct:],[:space:],[ :上部:],等等。 例如,要搜索大寫字母:
egrep [[:upper:]] diccioario
希望對您有所幫助...很快,我將在專門針對它的文章中解釋正則表達式...
下午好。
幾句話...
您解釋了'egrep'命令,但沒有在'egrep'和'grep'之間進行區別,這應該在這裡。
例如:
使用grep:ip -4 a | grep'[0-9] \ +'
使用egrep:ip -4 a | egrep'[0-9] +'
嗯,這是錯誤的,'egrep“ Hello。* Bye” example.txt'; 當文件中有一行包含字符串“ Hello”,後跟“ everyby”和“ goodbye”的行時,成功就可以實現,該行實際上可以以任何東西開頭和結尾。
這就是文章所說的:
egrep'^你好*再見$'example.txt
並且所有選項,或者幾乎所有選項(我不停地檢查它)都是'grep'選項,而不是'egrep'選項。
最好的問候。
感謝您報告該錯誤。 您對正則表達式的評論,我已經在第二段中提到了。 我將為他們專門寫一篇文章,因為有很多文章,而這篇文章將花費很長時間。 一聲問候!
再次問好,以撒。
在第二段中,您基本上說了,或者應該說,“ egrep”是“ grep -E”的別名,但是您沒有提供任何將“ egrep”用於正則表達式的示例,該正則表達式與由'grep'使用。
專為解釋擴展的正則表達式而設計的文章對我來說似乎是個大膽的嘗試,因為諸如此類的網站不會做廣告,並且正在對GNU社區進行非常重要的信息工作: https://www.rexegg.com/
我不是在這裡寫拖釣,我的意圖是,如果某人閱讀此條目以了解“ egrep”或“ grep”的作用,請查看其他來源,該條目不能引用任何內容,它解釋說很少,很糟糕,它提供了多餘的信息,並且可能造成混亂,特別是對於那些不了解GNU及其提供的強大工具的人。
最後,您已經添加並修復了我在第一條評論(^ $)之後指出的錯誤。 與在其他站點中一樣,您應該引用做出更正的人,或者至少說這是更正,它是GNU基礎的一部分,該基礎與本博客的創建基礎相同,但已經丟失。
問候。
感謝您的觀點。
FFSAF