Linux 中 20 個(gè)有用的 Egrep 命令示例
摘要: 在本指南中,我們將討論egrep 命令的一些實(shí)際示例。遵循本指南后,用戶將能夠在 Linux 中執(zhí)行更好的文本搜索。
您是否曾因在記錄中找不到所需信息而灰心喪氣?從大型數(shù)據(jù)庫(kù)中提取必要的信息是一項(xiàng)復(fù)雜且耗時(shí)的任務(wù)。
當(dāng)操作系統(tǒng)沒(méi)有提供合適的工具時(shí),事情就會(huì)變得非常具有挑戰(zhàn)性,而這正是 Linux 可以拯救你的地方。Linux提供了各種文本刪除工具,如sed、cut等。
然而,egrep 是 Linux 中最強(qiáng)大、最常用的文本處理工具之一,我們將討論 egrep 命令的一些示例。
Linux 中的egrep 命令由grep 命令族識(shí)別,用于搜索和匹配文件中的特定模式。它的工作方式類(lèi)似于 grep -E(grep 擴(kuò)展正則表達(dá)式),但通常會(huì)查找特定文件甚至行來(lái)排列或打印給定文件中的行。
egrep命令的語(yǔ)法如下:
$egrep [選項(xiàng)] 模式 [文件]
讓我們創(chuàng)建一個(gè)示例文本文件,其中包含以下內(nèi)容以供使用:
$ 貓樣本.txt
此時(shí),我們可以看到文本文件已經(jīng)準(zhǔn)備好了?,F(xiàn)在讓我們看一些日常可以使用的常見(jiàn)示例。
professional讓我們從一個(gè)簡(jiǎn)單的樣本匹配示例開(kāi)始,我們可以使用以下命令在sample.txt 文件中搜索字符串:
$egrep 專(zhuān)業(yè)人士樣本.txt
在這里,我們可以看到該命令打印包含指定模式的行。
我們可以通過(guò)突出相似性來(lái)使結(jié)果更具信息性。為此,我們可以使用--coloregrep命令中的選項(xiàng)。例如,下面的命令將識(shí)別professionals紅色文本:
$egrep --color=汽車(chē)專(zhuān)業(yè)人士sample.txt
在這里我們可以看到,與前一個(gè)結(jié)果相比,相同的結(jié)果包含更多信息。此外,我們可以很容易地注意到該單詞重復(fù)了d?nyala兩次。
在大多數(shù) Linux 操作系統(tǒng)中,默認(rèn)情況下使用以下別名啟用上述過(guò)程:
$別名egrep='egrep –color=auto'
egrep 命令接受多個(gè)文件作為參數(shù),允許我們?cè)诙鄠€(gè)文件中搜索特定模式。讓我們通過(guò)一個(gè)例子來(lái)理解這一點(diǎn)。
首先下載sample.txt文件:
$ cp 樣本.txt 樣本副本.txt
d?nyala現(xiàn)在,在兩個(gè)文件中找到一個(gè)模式:
$egrep Professional 樣本.txt 樣本-copy.txt
在上面的示例中,我們可以在輸出中看到文件名,它代表該文件中的相關(guān)行。
有時(shí)我們只需要知道該模式是否在文件中。如果是,那么現(xiàn)在有多少行?-c在這種情況下,我們可以在代碼中使用年份選項(xiàng)。
例如,下面的命令將顯示結(jié)果 1,因?yàn)閐?nyala只有一行單詞。
$egrep -c 專(zhuān)業(yè)人士樣本.txt
1
在前面的示例中,我們看到-c該選項(xiàng)不計(jì)算模式出現(xiàn)的次數(shù)。例如,單詞d?w?lawo在一行中出現(xiàn)兩次,但-c該選項(xiàng)將其視為僅一次。
在這種情況下,我們可以使用命令-o選項(xiàng)來(lái)僅打印相關(guān)模型。例如,下面的命令將d?nyala在兩個(gè)單獨(dú)的行上顯示單詞:
$egrep -o 專(zhuān)業(yè)人士樣本.txt
現(xiàn)在,讓我們使用 wc 命令讀取這些行:
$egrep -o 專(zhuān)業(yè)人士sample.txt | 廁所-l
在上面的示例中,我們使用了egrep和wc命令的組合來(lái)計(jì)算特定模式的出現(xiàn)次數(shù)。
默認(rèn)情況下,egrep 以微觀方式執(zhí)行模式匹配。它意味著單詞——我們、我們、我們和我們被視為單獨(dú)的單詞。但是,我們可以使用該選項(xiàng)強(qiáng)制進(jìn)行無(wú)粒子搜索-i。
例如,在下面的命令中,文本mí和的模式匹配將會(huì)成功Mí:
$egrep -i 我們樣本.txt
在前面的示例中,我們看到egrep命令執(zhí)行部分匹配。例如,當(dāng)我們搜索文本mí時(shí),其他文本的模式匹配也成功。就像網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)一樣。
為了克服這個(gè)限制,我們可以應(yīng)用-w選擇,這會(huì)強(qiáng)制整個(gè)案例相等。
$egrep -w 我們樣本.txt
到目前為止,我們已經(jīng)使用egrep命令來(lái)繪制包含給定模式的線條。但有時(shí)我們想以相反的方式完成這項(xiàng)工作。
例如,我們可能想要繪制不包含給定圖像的線條。我們可以-v借助選項(xiàng)來(lái)做到這一點(diǎn):
$egrep -v 我們樣本.txt
在這里,我們可以看到該命令打印了所有沒(méi)有文本的行mí。
我們可以使用-n命令的選項(xiàng)來(lái)啟用行號(hào),如果模式匹配成功,則在輸出中顯示行號(hào)。這種簡(jiǎn)單的技術(shù)使曝光變得更有意義。
$egrep -n 專(zhuān)業(yè)人士樣本.txt
從上面的結(jié)果中,我們可以看到d?nyala第5行包含了word。
在靜默模式下,egrep 命令不會(huì)打印正確的圖像。因此,我們必須通過(guò)命令的返回值來(lái)判斷模型匹配是否成功。
我們可以使用命令-q選項(xiàng)來(lái)創(chuàng)建靜默模式,這在編寫(xiě) shell 腳本時(shí)會(huì)派上用場(chǎng)。
$egrep -q 專(zhuān)業(yè)人士樣本.txt
$egrep -q 不存在的模式樣本.txt
在此模型中,返回值為零表示模型存在,而非零值表示模型不存在。
有時(shí),在對(duì)稱(chēng)圖像周?chē)@示幾條線是有意義的。在這種情況下,我們可以使用命令-B選項(xiàng),該選項(xiàng)在適當(dāng)?shù)哪J街帮@示 Nwo 行。
例如,下面的命令將打印樣本匹配成功的行及其之前的 2 行。
$egrep -B 2 -n 專(zhuān)業(yè)人士sample.txt
在此示例中,我們使用-n年份選項(xiàng)來(lái)顯示行號(hào)。
同樣,我們可以使用命令-A選項(xiàng)來(lái)顯示模式匹配后的行。例如,下面的命令將打印樣本匹配成功的行以及接下來(lái)的 2 行。
$egrep -A 2 -n 專(zhuān)業(yè)人士sample.txt
除此之外,egrep 命令支持將選擇和功能-C相結(jié)合的選擇,顯示...匹配模式之前和之后的行。-A-B
$egrep -C 2 -n 專(zhuān)業(yè)人士sample.txt
正如前面提到的,我們可以對(duì)多個(gè)文件進(jìn)行模式匹配。然而,當(dāng)多個(gè)子目錄下有文件并且我們將它們作為命令參數(shù)傳遞給所有子目錄時(shí),情況就會(huì)變得棘手。
在這種情況下,我們可以使用選擇以遞歸方式執(zhí)行模式匹配,-r如下例所示。
首先,創(chuàng)建2個(gè)子目錄并將sample.txt文件復(fù)制到其中:
$ mkdir -p dir1/dir2
$ cp 樣本.txt dir1/
$ cp 樣本.txt dir1/dir2/
現(xiàn)在,讓我們遞歸地進(jìn)行搜索:
$egrep -r 專(zhuān)業(yè)人士 dir1
在上面的示例中,我們可以看到 dir1/dir2/sample.txt 和 dir1/sample.txt 文件的樣本匹配成功。
我們可以使用點(diǎn)(.)字符來(lái)匹配除行尾之外的任何單個(gè)字符。例如,下面的正則表達(dá)式對(duì)應(yīng)于拼寫(xiě) har、hat 和 has:
$egrep“哈”。樣本.txt
我們可以使用星號(hào)(*)來(lái)匹配前一個(gè)字符零次或多次出現(xiàn)。例如,下面的正則表達(dá)式對(duì)應(yīng)于后跟零個(gè)或多個(gè)mí字符出現(xiàn)的字符串文本。b
$egrep“web*”sample.txt
我們可以使用加號(hào)(+)來(lái)匹配前一個(gè)字符的一次或多次出現(xiàn)。例如,下面的正則表達(dá)式對(duì)應(yīng)于包含字符串且后跟至少一次出現(xiàn)的mí字符的文本。b
$egrep“web+”sample.txt
在這里,我們可以看到,由于缺少腳本,因此項(xiàng) –mí和 的模式匹配不滿足。nyeb
我們可以使用插入符號(hào)(^)來(lái)表示行的開(kāi)頭。例如,下面的正則表達(dá)式打印以 text 開(kāi)頭的行Mí:
$egrep“^We”sample.txt
我們可以用美元($)來(lái)代表行尾。例如,下面的正則表達(dá)式打印以 text 結(jié)尾的行e.:
$egrep“e.$”sample.txt
我們可以使用緊跟(^)在美元后面的($)插入符號(hào)來(lái)表示空行。讓我們?cè)谡齽t表達(dá)式中使用它來(lái)刪除空行:
$egrep -n -v "^$" 樣本.txt
從上面的結(jié)果中,我們可以看到行號(hào)2、4、6、8和10沒(méi)有顯示,因?yàn)樗鼈兪强盏摹?/span>
在本文中,我們討論了egrep命令的一些很好的例子。人們可以在日常生活中使用這些模型來(lái)提高性能。
您知道 Linux 中的 egrep 命令還有其他最佳示例嗎?請(qǐng)?jiān)谙旅娴脑u(píng)論中告訴我們您的想法。