自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何在 Linux/macOS 中使用 grep 命令

系統(tǒng)
在本教程中,您將學(xué)習(xí)如何將 grep 與字符串、基本正則表達(dá)式和擴(kuò)展正則表達(dá)式一起使用。

全局正則表達(dá)式打?。╣rep)是一個(gè)強(qiáng)大的工具,可以在文本文件或標(biāo)準(zhǔn)輸入中搜索匹配正則表達(dá)式的行,并將結(jié)果打印到標(biāo)準(zhǔn)輸出。正則表達(dá)式(regex)是一種特殊的字符序列,可以幫助你有效地匹配文本或文件中的字符串。

在UNIX/Linux中,grep命令通常與正則表達(dá)式一起使用,以在文件中查找匹配的行。grep命令的一般語法如下:

grep [options] pattern [file...]

其中,pattern是要匹配的正則表達(dá)式模式,file是要搜索的文件名或文件路徑。可以省略file參數(shù),此時(shí)grep將從標(biāo)準(zhǔn)輸入中讀取數(shù)據(jù)。

grep命令將輸出所有匹配的行,以及行中的匹配部分會(huì)被高亮顯示??梢允褂貌煌倪x項(xiàng)來控制grep的行為,例如使用-i選項(xiàng)進(jìn)行忽略大小寫的匹配,使用-r選項(xiàng)進(jìn)行遞歸搜索等。

基本正則表達(dá)式字符支持以下內(nèi)容:

擴(kuò)展正則表達(dá)式支持基本正則表達(dá)式和一些附加字符:

若要跳過這些字符中的任何一個(gè)并將其視為字符串文本,請(qǐng)?jiān)谒鼈兦懊娣胖靡粋€(gè)反斜杠。例如,如果不希望將 視為正則表達(dá)式字符,而僅將其視為問號(hào),請(qǐng)使用 。這適用于所有正則表達(dá)式。?\?

Grep 默認(rèn)支持基本正則表達(dá)式和帶有選項(xiàng)的擴(kuò)展正則表達(dá)式。如果您愿意,可以單獨(dú)使用 ,稱為:-Egrep -Eegrep

在本教程中,您將學(xué)習(xí)如何將 grep 與字符串、基本正則表達(dá)式和擴(kuò)展正則表達(dá)式一起使用。

grep語法

grep [options] 'expression' text

[選項(xiàng)] 例如或 –,我們將在稍后探索它們。

表達(dá)式表示搜索模式,該模式可以是字符串文本或正則表達(dá)式。

文本表示標(biāo)準(zhǔn)輸入,可以是文件、多個(gè)文件或其他命令的輸出。

我在一個(gè)名為 movies 的文件中準(zhǔn)備了電影列表.txt我們將使用此文本文件作為 grep 的輸入,并在此文件中搜索特定的搜索模式。

Top movies of all time:

The Shawshank Redemption (1994) - 9.2
The Godfather (1972) - 9.2
The Dark Knight (2008) - 9.0
the godfather part II (1974) - 9.0
Angry Men (1957) - 8.9
City of God (2002) - 8.6

基本搜索

看看《教父》是否在電影中.txt:

grep 'Godfather' movies.txt

輸出:

Grep 返回包含搜索詞“教父”的行。

將 grep 與正則表達(dá)式一起使用

示例 1:搜索前面有“The”的影片。

grep '^The' movies.txt

輸出:

眾所周知,正則表達(dá)式中的符號(hào)與以前面字符開頭的行匹配。

示例 2:搜索 2000 年之后發(fā)行的電影:

grep '20[0-9][0-9]' movies.txt

輸出:

2000 年之后的電影可以表示為 20xx,每個(gè) x 是 0 到 9 之間的任意數(shù)字,因此在表達(dá)式中替換為 [0-9]。

什么是 egrep?

如前所述,是另一個(gè)允許使用擴(kuò)展正則表達(dá)式的命令。讓我們看一個(gè)例子:查找?guī)в小敖谈浮被颉昂诎怠币辉~的電影

我們知道擴(kuò)展正則表達(dá)式中的 OR 由 表示:

grep -E 'Godfather|Dark' movies.txt

輸出:

如果我們單獨(dú)使用 grep(沒有 -E 選項(xiàng)),上面的命令不會(huì)返回任何內(nèi)容,因?yàn)樗鼘⒎?hào)視為文字而不是特殊字符。|

此外,上述命令等效于以下命令:

egrep 'Godfather|Dark' movies.txt

忽略區(qū)分大小寫

如果你注意到在電影.txt文件中,我們也有帶有小寫字母的電影“教父第二部分”,但我們使用搜索詞“教父”的搜索都沒有返回這一行。這是因?yàn)?grep 區(qū)分大小寫,我們可以使用選項(xiàng)忽略區(qū)分大小寫:

grep -i 'Godfather' movies.txt

輸出:

我們可以看到,無論大小寫如何,都返回了帶有“教父”一詞的兩行。

搜索完整單詞

讓我們看看如果我們搜索“上帝”這個(gè)詞會(huì)發(fā)生什么:

grep 'God' movies.txt

輸出:

兩部關(guān)鍵詞為“教父”和“上帝”的電影都是匹配的。這是因?yàn)閮蓚€(gè)關(guān)鍵字都有字母“上帝”。

要只匹配“上帝”(完整單詞),您可以使用 -w 選項(xiàng):

grep -w 'God' movies.txt

輸出:

僅返回匹配的單詞

我們可以使用選項(xiàng)只返回搜索的單詞,而不是整行。

grep -o 'Godfather' movies.txt

輸出:

反向搜索

反轉(zhuǎn)搜索返回除“表達(dá)式”之外的所有內(nèi)容。這與正常搜索相反。

例如,讓我們返回所有沒有“上帝”一詞的電影:

grep -v 'God' movies.txt

輸出:

我們可以看到所有沒有“上帝”一詞的電影。然而,我們?nèi)匀辉谀抢锟吹健敖谈浮薄_@是因?yàn)槲覀冊(cè)谒阉髟~中沒有忽略區(qū)分大小寫。我們可以將 -i 選項(xiàng)與 -v 結(jié)合使用,如下所示:

grep -iv 'God' movies.txt

輸出:

返回帶有行號(hào)的結(jié)果

如果要編輯與“表達(dá)式”匹配的行,查找行號(hào)可能非常有用,為此,請(qǐng)使用 -n 選項(xiàng):

grep -n 'Angry Men' movies.txt

輸出:

我們有它?!皯嵟娜恕币辉~出現(xiàn)在第 7 行。

我們可以使用像 vim 這樣的編輯器來編輯該特定行:

vim +7 movies.txt

它將直接帶您到第 7 行。

計(jì)算匹配字?jǐn)?shù)

如果我們想知道有多少電影有“上帝”這個(gè)詞,我們可以使用 -c 選項(xiàng):

grep -c 'God' movies.txt

輸出:

同樣,我們可以結(jié)合選項(xiàng)來了解有多少電影的標(biāo)題中有“上帝”或“上帝”。

grep -ic 'god' movies.txt

輸出:

返回完全匹配(全行)

要了解搜索詞(表達(dá)式)是否與行匹配,請(qǐng)使用 -x 選項(xiàng):

grep -x 'City of God (2002) - 8.6' movies.txt

僅當(dāng)整行與搜索的詞匹配時(shí),它才會(huì)匹配:

返回具有搜索詞的文件名

要查看哪些文件具有我們的搜索詞(表達(dá)式),我們使用 -l 選項(xiàng)。我們可以將多個(gè)文件名傳遞給它或使用星號(hào) (*):

grep -l 'Godfather' movies.txt grep.sh

或:

grep -l 'Godfather' ./*

在這里,我們告訴 grep 在當(dāng)前目錄中的任何文件中查找“教父”。

輸出:

./grep.sh
./movies.txt

單獨(dú)使用 option 只會(huì)搜索當(dāng)前目錄,如果當(dāng)前目錄中有子目錄,grep 不會(huì)搜索它們并拋出錯(cuò)誤。那是因?yàn)?grep 需要一個(gè)文件。為了克服這個(gè)問題,我們將遞歸查找任何文件的選項(xiàng)結(jié)合起來。

grep -lr 'Godfather' ./grep

點(diǎn) (.) 表示 Linux 中的當(dāng)前目錄。

輸出:

返回文件名和匹配的行

這就像具有額外功能的選項(xiàng)一樣,可以返回文件中匹配行的外觀。-l

我們使用 -H 選項(xiàng):

grep -Hr 'Godfather' ./grep

輸出:

如您所見,-H 選項(xiàng)返回文件名以及匹配的行,用冒號(hào) (:) 分隔。

比賽結(jié)束后返回其他行

有時(shí)我們想知道匹配行之后有哪些行。我們可以像下面這樣使用 -A 選項(xiàng)。

要在匹配行之后打印另外 2 行:

grep -A2 'Dark Knight' movies.txt

輸出:

因此,我們不僅有與表達(dá)式“黑暗騎士”匹配的行,而且我們還有后面的 2 行。

賽前返回線

這就像 -A 選項(xiàng),但它在相反的方向上工作。我們使用 -B(之前)來實(shí)現(xiàn)這一點(diǎn)。

要在具有匹配表達(dá)式“黑暗騎士”的行之前獲取 2 行:

grep -B2 'Dark Knight' movies.txt

輸出:

賽前和賽后的回程線

這結(jié)合了 -A 和 -B 選項(xiàng)。我們使用 -C 來實(shí)現(xiàn)這一點(diǎn)。

要返回帶有術(shù)語“黑暗騎士”的行之前的 2 行和之后的 2 行:

grep -C2 'Dark Knight' movies.txt

輸出:

使用 grep 搜索其他命令的輸出

我們可以使用 Linux 管道將任何命令的輸出作為標(biāo)準(zhǔn)輸入傳遞給 grep,并以與搜索文件相同的方式搜索它。

例如,讓我們搜索命令的輸出。

僅列出目錄:

ls -l | grep '^d'

從正則表達(dá)式中,我們知道這意味著匹配輸出中以字母“d”開頭的任何行,這意味著 Linux 中的目錄。

輸出:

結(jié)論

grep 是 UNIX 系統(tǒng)中一個(gè)非常強(qiáng)大和有用的命令,如果使用得當(dāng),可以節(jié)省我們寶貴的時(shí)間。使用正則表達(dá)式可以非常有效和高效地搜索文件、多個(gè)文件、目錄中的文本模式和其他命令的輸出。在本教程中,我們解釋了如何將 grep 與正則表達(dá)式一起使用,并演示了一些最有用的 grep 選項(xiàng)。

責(zé)任編輯:趙寧寧 來源: 微技術(shù)之家
相關(guān)推薦

2021-07-20 10:00:28

Linuxgrep命令

2021-07-13 07:52:02

Linuxgrep命令

2018-06-26 09:15:24

Linux命令history

2022-11-18 10:16:26

Linuxwc 命令

2018-05-16 10:32:06

Linux命令find

2022-10-25 09:07:28

Linuxxargs命令

2021-01-13 09:40:26

Linuxexport命令

2018-04-28 09:12:42

Linux

2022-05-25 08:41:48

Linuxfd 命令文件

2019-09-16 19:00:48

Linux變量

2023-01-31 17:36:22

IPLinux網(wǎng)絡(luò)

2022-11-21 12:06:24

fgrep命令Linux

2022-03-30 09:32:32

BashtestLinux

2022-11-23 08:14:42

bash 腳本test 命令

2023-01-09 10:29:41

mv命令Linux

2021-03-29 10:10:15

Linuxgrep

2018-07-26 09:55:44

Linux命令升級(jí)軟件

2012-05-11 10:10:47

Linuxgrep

2018-10-09 08:30:55

UbuntuLinuxRAR文件

2015-12-16 16:01:13

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)