如何在linux上使用grep命令

Linux grep命令是一個字串和模式匹配實用程式,它顯示來自多個檔案的匹配行。它還可以處理其他命令的管道輸出。我們教你怎麼做。...

Linux grep命令是一個字串和模式匹配實用程式,它顯示來自多個檔案的匹配行。它還可以處理其他命令的管道輸出。我們教你怎麼做。

格雷普背後的故事

grep命令在Linux和Unix界很有名,原因有三個。首先,它非常有用。第二,豐富的選擇可能是壓倒性的。第三,它是一夜之間寫好的,以滿足特定的需要。前兩個是“砰”的一聲;第三個是“砰”的一聲。

kenthompson從ed編輯器(發音為eedee)中提取了正則表示式搜尋功能,併為自己建立了一個小程式來搜尋文字檔案。他在貝爾實驗室的部門負責人道格·麥克羅伊(Doug Mcilroy)找到湯普森,描述了他的一位同事李·麥克馬洪(Lee McMahon)面臨的問題。

麥克馬洪試圖透過文字分析來確定聯邦黨論文的作者。他需要一個可以在文字檔案中搜索短語和字串的工具。那天晚上,湯普森花了大約一個小時把他的工具變成了一個通用工具,可以被其他人使用,並把它改名為grep。他的名字來自ed命令字串g/re/p,翻譯成“全域性正則表示式搜尋”

你可以看湯普森和布萊恩·克尼根談論格雷普的出生。

使用grep進行簡單搜尋

要在檔案中搜索字串,請在命令列中傳遞搜尋項和檔名:

grep dave /etc/password in a terminal widnow

將顯示匹配行。在這種情況下,它是一條單行線。匹配的文字將高亮顯示。這是因為在大多數發行版上,grep的別名是:

alias grep='grep --colour=auto'

讓我們看看有多行匹配的結果。我們將在應用程式日誌檔案中查詢單詞“Average”。因為我們無法回憶該單詞在日誌檔案中是否為小寫,所以我們將使用-i(忽略大小寫)選項:

grep -i Average geek-1.log

如何在linux上使用grep命令

將顯示每個匹配行,並在每個行中突出顯示匹配文字。

如何在linux上使用grep命令

我們可以使用-v(反轉匹配)選項來顯示不匹配的行。

grep -v Mem geek-1.log

如何在linux上使用grep命令

沒有突出顯示,因為這些是不匹配的行。

如何在linux上使用grep命令

我們可以讓格雷普完全沉默。結果作為grep的返回值傳遞給shell。0的結果意味著找到了字串,而一個結果意味著找不到字串。我們可以使用$檢查返回程式碼?特殊引數:

grep -q average geek-1.log echo $? grep -q howtogeek geek-1.log echo $?

如何在linux上使用grep命令

grep遞迴搜尋

要搜尋巢狀的目錄和子目錄,請使用-r(遞迴)選項。請注意,命令列上沒有提供檔名,必須提供路徑。我們在當前目錄“.”和任何子目錄中搜索:

grep -r -i memfree .

如何在linux上使用grep命令

輸出包括每個匹配行的目錄和檔名。

如何在linux上使用grep命令

我們可以使用-R(遞迴解引用)選項使grep跟隨符號連結。我們在這個目錄中有一個符號連結,叫做logs資料夾。它指向/home/dave/logs。

ls -l logs-folder

如何在linux上使用grep命令

讓我們用-R(遞迴解引用)選項重複上一次搜尋:

grep -R -i memfree .

如何在linux上使用grep命令

符號連結後面跟著,它指向的目錄也會被grep搜尋。

如何在linux上使用grep命令

搜尋整詞

預設情況下,如果搜尋目標出現在某行的任何位置,包括另一個字串中,grep將匹配該行。看看這個例子。我們要搜尋“免費”這個詞

grep -i free geek-1.log

如何在linux上使用grep命令

結果是包含字串“free”的行,但它們不是單獨的單詞。它們是字串“MemFree”的一部分

如何在linux上使用grep命令

要強制grep只匹配單獨的“words”,請使用-w(word regexp)選項。

grep -w -i free geek-1.log echo $?

如何在linux上使用grep命令

這次沒有結果,因為搜尋詞“free”不會作為單獨的詞出現在檔案中。

使用多個搜尋詞

E(extended regexp)選項允許您搜尋多個單詞。(E選項替換了不推薦使用的grep的egrep版本。)

此命令搜尋兩個搜尋詞“average”和“memfree”

grep -E -w -i "average|memfree" geek-1.log

如何在linux上使用grep命令

將為每個搜尋項顯示所有匹配行。

如何在linux上使用grep命令

您還可以搜尋不一定是整詞的多個術語,但它們也可以是整詞。

e(patterns)選項允許您在命令列上使用多個搜尋詞。我們正在利用正則表示式括號特性來建立一個搜尋模式。它告訴grep匹配括號“[]”中包含的任何一個字元。這意味著grep在搜尋時將匹配“kB”或“kB”。

如何在linux上使用grep命令

兩個字串都是匹配的,事實上,有些行同時包含這兩個字串。

007Ys3FFgy1gp5ixcyyu3j30hy0amgmy

精確匹配行

-x(行regexp)只匹配整行與搜尋項匹配的行。讓我們搜尋一個只在日誌檔案中出現一次的日期和時間戳:

grep -x "20-Jan--06 15:24:35" geek-1.log

如何在linux上使用grep命令

找到並顯示匹配的單行。

相反的是隻顯示不匹配的線條。這在檢視配置檔案時非常有用。評論很好,但有時很難在所有評論中發現實際的設定。以下是/etc/sudoers檔案:

如何在linux上使用grep命令

我們可以有效地過濾出如下注釋行:

sudo grep -v "#" /etc/sudoers

如何在linux上使用grep命令

這更容易分析。

僅顯示匹配文字

可能有一種情況,你不想看到整個匹配行,只是匹配的文字。-o(僅匹配)選項就是這樣做的。

grep -o MemFree geek-1.log

如何在linux上使用grep命令

顯示減少為僅顯示與搜尋項匹配的文字,而不是整個匹配行。

如何在linux上使用grep命令

用grep計數

grep不僅僅是文字,它還可以提供數字資訊。我們可以用不同的方式讓格雷普對我們有價值。如果我們想知道一個搜尋詞在一個檔案中出現了多少次,我們可以使用-c(count)選項。

grep -c average geek-1.log

如何在linux上使用grep命令

grep報告這個搜尋詞在這個檔案中出現了240次。

您可以使用-n(行號)選項使grep顯示每個匹配行的行號。

grep -n Jan geek-1.log

如何在linux上使用grep命令

每個匹配行的行號都顯示在行首。

如何在linux上使用grep命令

要減少顯示的結果數,請使用-m(max count)選項。我們將輸出限制為五行匹配:

grep -m5 -n Jan geek-1.log

如何在linux上使用grep命令

新增上下文

對於每一條匹配線,能夠看到一些額外的線(可能是不匹配的線)通常是有用的。它可以幫助區分哪些匹配的線是你感興趣的。

要在匹配行之後顯示一些行,請使用-A(在上下文之後)選項。在這個例子中,我們需要三行:

grep -A 3 -x "20-Jan-06 15:24:35" geek-1.log

如何在linux上使用grep命令

要檢視匹配行之前的一些行,請使用-B(context before)選項。

grep -B 3 -x "20-Jan-06 15:24:35" geek-1.log

如何在linux上使用grep命令

要包含匹配行前後的行,請使用-C(context)選項。

grep -C 3 -x "20-Jan-06 15:24:35" geek-1.log

如何在linux上使用grep命令

顯示匹配的檔案

要檢視包含搜尋項的檔案的名稱,請使用-l(具有匹配項的檔案)選項。要找出哪些C原始碼檔案包含對sl.h標頭檔案的引用,請使用以下命令:

grep -l "sl.h" *.c

如何在linux上使用grep命令

將列出檔名,而不是匹配的行。

如何在linux上使用grep命令

當然,我們可以查詢不包含搜尋項的檔案。-L(files without match)選項就是這樣做的。

grep -L "sl.h" *.c

如何在linux上使用grep命令

行的開始和結束

我們可以強制grep只顯示在一行開頭或結尾的匹配項。“^”正則表示式運算子匹配行的開頭。實際上,日誌檔案中的所有行都將包含空格,但我們將搜尋第一個字元為空格的行:

grep "^ " geek-1.log

如何在linux上使用grep命令

將顯示行首第一個字元為空格的行。

如何在linux上使用grep命令

要匹配行尾,請使用“$”正則表示式運算子。我們要搜尋以“00”結尾的行

grep "00$" geek-1.log

如何在linux上使用grep命令

顯示屏顯示以“00”作為其最後字元的行。

如何在linux上使用grep命令

與grep一起使用管道

當然,您可以將輸入透過管道傳輸到grep,將grep的輸出透過管道傳輸到另一個程式,並將grep巢狀在管道鏈的中間。

假設我們希望在C原始碼檔案中看到字串“ExtractParameters”的所有出現。我們知道會有很多,所以我們用管道把輸出量減少到:

grep "ExtractParameters" *.c | less

如何在linux上使用grep命令

輸出以較少的單位表示。

如何在linux上使用grep命令

這使您可以瀏覽檔案列表並使用less的搜尋工具。

如果我們將grep的輸出透過管道傳輸到wc並使用-l(lines)選項,我們可以計算原始碼檔案中包含“ExtractParameters”的行數。(我們可以使用grep-c(count)選項來實現這一點,但這是演示grep外管道的一種簡潔方法。)

grep "ExtractParameters" *.c | wc -l

如何在linux上使用grep命令

接下來的命令是,我們將從ls輸出到grep,並將grep的輸出管道化為sort。我們正在列出當前目錄中的檔案,選擇其中包含字串“Aug”的檔案,並按檔案大小對它們進行排序:

ls -l | grep "Aug" | sort +4n

如何在linux上使用grep命令

我們來分解一下:

  • ls-l:使用ls執行檔案的長格式列表。
  • grep“Aug”:從ls列表中選擇包含“Aug”的行。請注意,這還可以找到名稱中包含“Aug”的檔案。
  • sort+4n:對grep輸出的第四列(filesize)進行排序。

我們得到了8月份修改的所有檔案的排序列表(不考慮年份),按檔案大小的升序排列。

相關:如何在Linux上使用管道

格雷普:少了指揮權,多了一個盟友

grep是一個非常好的工具,您可以隨時使用。它可以追溯到1974年,現在仍然很強大,因為我們需要它所做的,沒有什麼比它做得更好。

把grep和一些正則表示式耦合起來,真的把它帶到了一個新的層次。

相關:如何使用基本正則表示式更好地搜尋和節省時間

  • 發表於 2021-04-02 17:23
  • 閱讀 ( 45 )
  • 分類:網際網路

你可能感興趣的文章

如何在linux上查詢和修復損壞的包

...就是為您準備的。我們將簡要詳細地討論損壞的軟體包,如何檢查系統是否包含損壞的軟體包,以及如何正確地重新安裝它們。 ...

  • 發佈於 2021-03-11 11:30
  • 閲讀 ( 52 )

如何在linux中使用ls命令

如果您不知道如何使用ls命令,那麼獲取與儲存上的檔案相關的詳細資訊是很困難的。在這裡,我們將討論Linux上與ls命令相關的所有內容,以及它使用的一些不同的標誌。 ...

  • 發佈於 2021-03-26 18:01
  • 閲讀 ( 56 )

啟動linux的9個基本命令

... 如何在linux下開啟終端 ...

  • 發佈於 2021-03-26 18:33
  • 閲讀 ( 59 )

如何檢查linux核心和作業系統版本

...版本可以讓您對安全更新做出重要決定。我們將向您展示如何找到這些,無論您使用哪個發行版。 滾動和點釋放 你知道你在執行哪個版本的Linux嗎?你能找到核心版本嗎?Linux的滾動發行版,如Arch、Manjaro和openSUSE,經常使用自...

  • 發佈於 2021-04-01 13:11
  • 閲讀 ( 51 )

如何使用linux的man命令:隱藏的祕密和基礎知識

...把它點燃看看! 相關:您應該知道的37條重要的Linux命令 如何開啟手冊 要使用man,請在命令列中鍵入man,後跟空格和Linux命令。man開啟Linux手冊的“手冊頁”,其中描述了該命令,當然,如果它能找到它的話。 讓我們輸入以下內...

  • 發佈於 2021-04-02 10:46
  • 閲讀 ( 56 )

如何在linux上使用正則表示式(regex)

...在Linux上做了什麼嗎?他們給你命令列魔法!我們將教你如何施展正則表示式法術並提升你的命令列技能。 什麼是正則表示式(regular expressi***)? 正則表示式(regex)是一種查詢匹配字元序列的方法。它們使用字母和符號來定義...

  • 發佈於 2021-04-02 11:27
  • 閲讀 ( 41 )

如何在linux上使用suid、sgid和sticky位

...權的人才能訪問儲存的密碼,那麼那些沒有該許可權的人如何更改他們的密碼? 提升你的地位 通常,Linux命令和程式執行時與啟動程式的人具有相同的許可權集。當root執行passwd命令以更改密碼時,它將以root的許可權執行。這意...

  • 發佈於 2021-04-02 14:48
  • 閲讀 ( 39 )

如何在linux上使用history命令

...複您過去執行的命令。一旦您瞭解了Linux history命令以及如何使用它,它就可以顯著地提高您的生產效率。 操縱歷史 正如喬治桑塔亞納(georgestantayana)的一句名言:“那些記不住過去的人註定要重蹈覆轍。”不幸的是,在Linux...

  • 發佈於 2021-04-02 18:17
  • 閲讀 ( 51 )

如何在linux上使用dmesg命令

...和術語。按less中的正斜槓“/”鍵啟動搜尋功能。 相關:如何在Linux上使用less命令 不再需要sudo 如果希望避免每次使用dmesg時都必須使用sudo,可以使用以下命令。但是,請注意:它允許任何擁有您的計算機使用者帳戶的人使用dme...

  • 發佈於 2021-04-02 21:09
  • 閲讀 ( 58 )

如何使用ls命令列出linux上的檔案和目錄

...命令之一。也許這是問題的一部分。有這麼多的選擇,你如何從中篩選出有用的呢?找到它們之後,你怎麼記得它們? ls命令及其選項和引數字串的有用排列是別名的最佳候選。實際上,在大多數發行版中,您認為的“裸”ls命...

  • 發佈於 2021-04-02 21:28
  • 閲讀 ( 46 )
pv4gi2Td
pv4gi2Td

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦