偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

全局正則表達式打印(grep)是一個強大的工具,可以在文本文件或標準輸入中搜索匹配正則表達式的行,并將結果打印到標準輸出。正則表達式(regex)是一種特殊的字符序列,可以幫助你有效地匹配文本或文件中的字符串。

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

grep [options] pattern [file...]

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

grep命令將輸出所有匹配的行,以及行中的匹配部分會被高亮顯示。可以使用不同的選項來控制grep的行為,例如使用-i選項進行忽略大小寫的匹配,使用-r選項進行遞歸搜索等。

基本正則表達式字符支持以下內容:

擴展正則表達式支持基本正則表達式和一些附加字符:

若要跳過這些字符中的任何一個并將其視為字符串文本,請在它們前面放置一個反斜杠。例如,如果不希望將 視為正則表達式字符,而僅將其視為問號,請使用 。這適用于所有正則表達式。?\?

Grep 默認支持基本正則表達式和帶有選項的擴展正則表達式。如果您愿意,可以單獨使用 ,稱為:-Egrep -Eegrep

在本教程中,您將學習如何將 grep 與字符串、基本正則表達式和擴展正則表達式一起使用。

grep語法

grep [options] 'expression' text

[選項] 例如或 –,我們將在稍后探索它們。

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

文本表示標準輸入,可以是文件、多個文件或其他命令的輸出。

我在一個名為 movies 的文件中準備了電影列表.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 與正則表達式一起使用

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

grep '^The' movies.txt

輸出:

眾所周知,正則表達式中的符號與以前面字符開頭的行匹配。

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

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

輸出:

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

什么是 egrep?

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

我們知道擴展正則表達式中的 OR 由 表示:

grep -E 'Godfather|Dark' movies.txt

輸出:

如果我們單獨使用 grep(沒有 -E 選項),上面的命令不會返回任何內容,因為它將符號視為文字而不是特殊字符。|

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

egrep 'Godfather|Dark' movies.txt

忽略區(qū)分大小寫

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

grep -i 'Godfather' movies.txt

輸出:

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

搜索完整單詞

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

grep 'God' movies.txt

輸出:

兩部關鍵詞為“教父”和“上帝”的電影都是匹配的。這是因為兩個關鍵字都有字母“上帝”。

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

grep -w 'God' movies.txt

輸出:

僅返回匹配的單詞

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

grep -o 'Godfather' movies.txt

輸出:

反向搜索

反轉搜索返回除“表達式”之外的所有內容。這與正常搜索相反。

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

grep -v 'God' movies.txt

輸出:

我們可以看到所有沒有“上帝”一詞的電影。然而,我們仍然在那里看到“教父”。這是因為我們在搜索詞中沒有忽略區(qū)分大小寫。我們可以將 -i 選項與 -v 結合使用,如下所示:

grep -iv 'God' movies.txt

輸出:

返回帶有行號的結果

如果要編輯與“表達式”匹配的行,查找行號可能非常有用,為此,請使用 -n 選項:

grep -n 'Angry Men' movies.txt

輸出:

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

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

vim +7 movies.txt

它將直接帶您到第 7 行。

計算匹配字數(shù)

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

grep -c 'God' movies.txt

輸出:

同樣,我們可以結合選項來了解有多少電影的標題中有“上帝”或“上帝”。

grep -ic 'god' movies.txt

輸出:

返回完全匹配(全行)

要了解搜索詞(表達式)是否與行匹配,請使用 -x 選項:

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

僅當整行與搜索的詞匹配時,它才會匹配:

返回具有搜索詞的文件名

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

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

或:

grep -l 'Godfather' ./*

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

輸出:

./grep.sh
./movies.txt

單獨使用 option 只會搜索當前目錄,如果當前目錄中有子目錄,grep 不會搜索它們并拋出錯誤。那是因為 grep 需要一個文件。為了克服這個問題,我們將遞歸查找任何文件的選項結合起來。

grep -lr 'Godfather' ./grep

點 (.) 表示 Linux 中的當前目錄。

輸出:

返回文件名和匹配的行

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

我們使用 -H 選項:

grep -Hr 'Godfather' ./grep

輸出:

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

比賽結束后返回其他行

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

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

grep -A2 'Dark Knight' movies.txt

輸出:

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

賽前返回線

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

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

grep -B2 'Dark Knight' movies.txt

輸出:

賽前和賽后的回程線

這結合了 -A 和 -B 選項。我們使用 -C 來實現(xiàn)這一點。

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

grep -C2 'Dark Knight' movies.txt

輸出:

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

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

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

僅列出目錄:

ls -l | grep '^d'

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

輸出:

結論

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

責任編輯:趙寧寧 來源: 微技術之家
相關推薦

2021-07-20 10:00:28

Linuxgrep命令

2021-07-13 07:52:02

Linuxgrep命令

2018-05-16 10:32:06

Linux命令find

2018-06-26 09:15:24

Linux命令history

2022-11-18 10:16:26

Linuxwc 命令

2022-10-25 09:07:28

Linuxxargs命令

2021-01-13 09:40:26

Linuxexport命令

2019-09-16 19:00:48

Linux變量

2018-04-28 09:12:42

Linux

2022-05-25 08:41:48

Linuxfd 命令文件

2023-01-31 17:36:22

IPLinux網(wǎng)絡

2022-11-23 08:14:42

bash 腳本test 命令

2022-11-21 12:06:24

fgrep命令Linux

2022-03-30 09:32:32

BashtestLinux

2023-01-09 10:29:41

mv命令Linux

2018-10-09 08:30:55

UbuntuLinuxRAR文件

2019-09-29 09:40:20

LinuxWindowsMacOS

2018-07-26 09:55:44

Linux命令升級軟件

2023-02-28 22:26:33

2023-05-17 18:45:56

Linux文件
點贊
收藏

51CTO技術棧公眾號