精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux在在文件中查找文本的Grep命令

Wildesbeast ? 來源:Linux公社 ? 作者:醉落紅塵 ? 2020-06-21 12:06 ? 次閱讀

grep命令是(global regular expression print,全局正則表達式輸出)的縮寫,它是Linux中功能最強大且最常用的命令之一。

grep在一個或多個輸入文件中搜索與給定模式匹配的行,并將每條匹配行寫入標準輸出。 如果未指定文件,則grep將從標準輸入讀取,該輸入通常是另一個命令的輸出。

在本文中,我們將通過實際示例和最常見的GNU grep選項的詳細說明,向您展示如何使用grep命令。

grep命令語法

grep命令的語法如下:

grep [OPTIONS] PATTERN [FILE.。.]

方括號中的項目是可選的。

OPTIONS - 零個或多個選項。 Grep包含許多控制其行為的選項。

PATTERN - 搜索模式。

FILE - 零個或多個輸入文件名。

為了能夠搜索文件,運行命令的用戶必須對該文件具有讀取權限。

在文件中搜索字符串

grep命令最基本的用法是在文件中搜索字符串(文本)。

例如,要顯示/etc/passwd文件中包含字符串bash的所有行,請運行以下命令:

[linuxidc@localhost ~/www.linuxidc.com]$ grep bash /etc/passwd

輸出應如下所示:

如果字符串包含空格,則需要將其用單引號或雙引號引起來:

[linuxidc@localhost ~/www.linuxidc.com]$grep “Gnome Display Manager” /etc/passwd

反轉匹配(排除)

要顯示與模式不匹配的行,請使用-v(或--invert-match)選項。

例如,要打印不包含字符串nologin的行,可以使用:

[linuxidc@localhost ~/www.linuxidc.com]$grep -v nologin /etc/passwd

使用Grep過濾命令的輸出

可以使用grep通過管道過濾命令的輸出,并且只有與給定模式匹配的行才會打印在終端上。

例如,要找出哪些系統以用戶www-data的身份在系統上運行,可以使用以下ps命令:

[linuxidc@localhost ~/www.linuxidc.com]$ps -ef | grep www-data

linuxidc 3980 3865 0 22:26 pts/1 00:00:00 grep --color=auto www-data

您也可以在命令中鏈接多個管道。 如您在上面的輸出中看到的,還有一行包含grep進程。 如果您不希望顯示該行,則將輸出傳遞到另一個grep實例,如下所示。

[linuxidc@localhost ~/www.linuxidc.com]$ps -ef | grep www-data | grep -v grep

遞歸搜索

要遞歸搜索模式,請使用-r選項(或--recursive)調用grep。 使用此選項時,grep將搜索指定目錄中的所有文件,并跳過遞歸遇到的符號鏈接。

要跟隨所有符號鏈接,請使用-R選項(或--dereference-recursive),而不是-r。

這是顯示如何在/etc目錄內的所有文件中搜索字符串linuxidc的示例:

[root@localhost /home/linuxidc/www.linuxidc.com]$grep -r linuxidc /etc

輸出將包含以文件的完整路徑為前綴的匹配行:

如果使用-R選項,則grep將跟隨所有符號鏈接:

[root@ www.linuxidc.com]$grep -R linuxidc.com /etc

注意下面輸出的最后一行。 當用-r調用grep時,不會打印該行,因為Nginx啟用站點的目錄中的文件是指向可用站點目錄中的配置文件的符號鏈接。

/etc/hosts:127.0.0.1 node2.linuxidc.com

/etc/nginx/sites-available/linuxidc.com: server_name linuxidc.com www.linuxidc.com;

/etc/nginx/sites-enabled/linuxidc.com: server_name linuxidc.com www.linuxidc.com;

僅顯示文件名

要取消默認grep輸出并僅打印包含匹配模式的文件名,請使用-l(或--files-with-matches)選項。

以下命令在當前工作目錄中搜索所有以.conf結尾的文件,并僅顯示包含字符串linuxidc.com的文件的名稱:

$grep -l linuxidc.com *.conf

輸出將如下所示:

tmux.conf

haproxy.conf

-l選項通常與遞歸選項-R結合使用:

$grep -Rl linuxidc.com /tmp

不區分大小寫的搜索

默認情況下,grep區分大小寫。 這意味著將大寫和小寫字符視為不同的字符。

要在搜索時忽略大小寫,請使用-i選項(或--ignore-case)調用grep。

例如,當搜索不帶任何選項的Zebra時,以下命令將不顯示任何輸出,即有匹配的行:

$grep Zebra /usr/share/words

但是,如果使用-i選項執行不區分大小寫的搜索,則它將同時匹配大小寫字母:

$grep -i Zebra /usr/share/words

指定“ Zebra”將匹配該字符串的“ zebra”,“ ZEbrA”或任何其他大小寫字母組合。

zebra

zebra‘s

zebras

搜索全詞

搜索字符串時,grep將顯示該字符串嵌入較大字符串中的所有行。

例如,如果您搜索“ gnu”,則將以較大的單詞(例如“ cygnus”或“ magnum”)嵌入“ gnu”的所有行都將匹配:

$grep gnu /usr/share/words

cygnus

gnu

interregnum

lgnu9d

lignum

magnum

magnuson

sphagnum

wingnut

要僅返回指定字符串是整個單詞(用非單詞字符括起來)的那些行,請使用-w(或--word-regexp)選項。

文字字符包括字母數字字符(a-z,A-Z和0-9)和下劃線(_)。 所有其他字符均視為非單詞字符。

如果您運行與上述相同的命令,包括-w選項,則grep命令將僅返回其中包含gnu作為單獨單詞的那些行。

$grep -w gnu /usr/share/words

gnu

顯示行號

-n(或--line-number)選項告訴grep顯示包含與模式匹配的字符串的行的行號。 使用此選項時,grep將匹配項打印到以行號為前綴的標準輸出。

例如,要顯示/etc/services文件中的包含字符串bash并帶有匹配行號的行,可以使用以下命令:

[linuxidc@localhost etc]$ grep -n 10000 /etc/services

下面的輸出顯示在行10423和10424上找到匹配項。

10445:ndmp 10000/tcp # Network Data Management Protocol

10446:ndmp 10000/udp # Network Data Management Protocol

Count函數匹配

若要將匹配行數打印到標準輸出,請使用-c(或 --count)選項。

在下面的示例中,我們將計算以/usr/bin/zsh作為shell的帳戶數量。

$regular expression$grep -c ’/usr/bin/zsh‘ /etc/passwd

輸出

4

安靜模式

-q(或--quiet)告訴grep在安靜模式下運行,不要在標準輸出上顯示任何內容。 如果找到匹配項,則該命令以狀態0退出。這在要檢查文件是否包含字符串并根據結果執行某些操作的shell腳本中使用grep時非常有用。

這是一個在安靜模式下使用grep作為if語句中的測試命令的示例:

if grep -q PATTERN filename

then

echo pattern found

else

echo pattern not found

fi

Basic正則表達式

GNU Grep具有三個正則表達式功能集,Basic、 Extended 和 perl 兼容

默認情況下,grep將模式解釋為基本的正則表達式,其中除元字符之外的所有字符實際上都是與自己匹配的正則表達式。

以下是最常用的元字符的列表:

使用^(插入符號)符號可在行首匹配表達式。 在下面的示例中,僅當字符串kangaroo出現在行的開頭時才匹配。

$grep “^kangaroo” file.txt

使用$(美元)符號來匹配行尾的表達式。 在下面的示例中,僅當字符串kangaroo出現在行的最后時才匹配。

$grep “kangaroo$” file.txt

使用。(點)符號以匹配任何單個字符。 例如,要匹配以kan開頭,然后有兩個字符并以字符串roo結尾的任何內容,可以使用以下模式:

$grep “kan..roo” file.txt

使用[](括號)來匹配括號中包含的任何單個字符。 例如,找到包含accept或“ accent”的行,可以使用以下模式:

$grep “acce[np]t” file.txt

使用[^]來匹配不在括號內的任何單個字符。下面的模式將匹配任何包含co(any_letter_except_l)a的字符串組合,如coca、cobalt等,但不匹配包含cola的行,

$grep “co[^l]a” file.txt

要轉義下一個字符的特殊含義,請使用(反斜杠)符號。

Extended正則表達式

要將模式解釋為擴展的正則表達式,請使用-E(或--extended-regexp)選項。 擴展的正則表達式包括所有基本元字符,以及用于創建更復雜和更強大的搜索模式的其他元字符。 以下是一些示例:

匹配并提取給定文件中的所有電子郵件地址:

$grep -E -o “[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+。[A-Za-z]{2,6}” file.txt

匹配并提取給定文件中的所有有效IP地址:

$grep -E -o ’(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)。(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)。(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)。(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)‘ file.txt

-o選項僅用于打印匹配的字符串。

搜索多個字符串(模式)

可以使用OR運算符|將兩個或多個搜索模式結合在一起。

默認情況下,grep將模式解釋為基本正則表達式,其中的元字符(例如|) 失去其特殊含義,必須使用反斜杠版本。

在以下示例中,我們正在Nginx日志錯誤文件中搜索所有出現的致命,錯誤和嚴重的單詞:

$grep ’fatal|error|critical‘ /var/log/nginx/error.log

如果使用擴展正則表達式選項-E,則不應轉義運算符|,如下所示:

$grep -E ’fatal|error|critical‘ /var/log/nginx/error.log

在匹配之前打印行

要在匹配行之前打印特定數量的行,請使用-B(或 --before-context)選項。

例如,要在匹配行之前顯示5行前奏上下文,可以使用以下命令:

$grep -B 5 root /etc/passwd

匹配后打印行

若要在匹配行之后打印特定數量的行,請使用-A(或 --after-context)選項。

例如,要在匹配行之后顯示尾隨上下文的五行,可以使用以下命令:

$grep -A 5 root /etc/passwd

總結

grep命令允許您在文件內部搜索模式。 如果找到匹配項,則grep打印包含指定模式的行。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11232

    瀏覽量

    208949
  • 字符
    +關注

    關注

    0

    文章

    232

    瀏覽量

    25178
收藏 人收藏

    評論

    相關推薦

    Linuxgrep命令的12個實際例子

    Linuxgrep命令的12個實際例子
    發表于 02-08 09:38 ?675次閱讀

    Linuxgrep、sed和awk命令詳解

    今天給大家聊一聊Linux文本操作的`三劍客:awk、grep、sed`,因其功能強大、使用頻繁,且是Linux文本處理的得力利器,常被
    發表于 04-26 17:20 ?3202次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>中</b><b class='flag-5'>grep</b>、sed和awk<b class='flag-5'>命令</b>詳解

    12個 Linux grep 命令的超級用法實例

    你是否遇到過需要在文件查找一個特定的字符串或者樣式,但是不知道從哪兒開始?那么,就請grep來幫你吧。grep是每個
    發表于 05-12 08:00

    Linux文件內容查詢命令

    Linux文件內容查詢命令 Linux文件內容查詢命令  
    發表于 01-18 12:45 ?841次閱讀

    Linux文件查找命令find,xargs詳述

    Linux文件查找命令find,xargs詳述 前言:關于find命令 由于find具有強大的功能,所以它的選項也很多,其中大部分選項都值得
    發表于 11-07 11:17 ?0次下載

    Linux grep 命令的超級用法實例

    你是否遇到過需要在文件查找一個特定的字符串或者樣式,但是不知道從哪兒開始?那么,就請grep來幫你吧。
    的頭像 發表于 03-17 09:01 ?4623次閱讀

    Linux中用grep命令來搜索單詞及統計匹配的行數

    使用 grep 命令來搜索多個單詞要使用 grep 命令來搜索多個字符串或單詞,我們該怎么做?例如我想要查找 /path/t
    發表于 04-02 14:46 ?619次閱讀

    簡述Linux文本查看命令

    Linux 常用命令,除了 cat 還有很多其他用于文本查看的命令
    的頭像 發表于 08-11 11:17 ?3522次閱讀

    LinuxGrep正則表達式詳細資料說明

    grepLinux中用于文本處理的最有用和功能最強大的命令之一。 grep在一個或多個輸入文件
    的頭像 發表于 06-21 11:39 ?2183次閱讀

    linux的scp命令怎么用_linuxgrep命令用法

    linux,scp命令用于Linux之間復制文件和目錄,即在一臺Linux服務器中將本地的
    發表于 09-04 15:36 ?4408次閱讀
    <b class='flag-5'>linux</b>的scp<b class='flag-5'>命令</b>怎么用_<b class='flag-5'>linux</b>的<b class='flag-5'>grep</b><b class='flag-5'>命令</b>用法

    如何使用grep命令的多種搜索模式及搜索多個字符串

    今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字符串。簡單介紹一下,grep 命令可以理解為是一個功能強大的
    的頭像 發表于 09-07 11:24 ?2531次閱讀

    如何使用grep命令

    grep命令的全稱是全局正則表達式打印,它是Linux功能最強大且最常用的命令之一。
    的頭像 發表于 12-06 16:43 ?2068次閱讀

    如何使用命令行在Linux查找文件

    終端,命令行提供了幾個用于搜索文件的工具,包括查找、定位、grep 和 where is,僅舉幾例。 那么如何使用命令行在
    的頭像 發表于 03-23 14:55 ?4199次閱讀

    Linux系統的10個常用的文本查看命令

    當你需要查看Linux系統文本文件時,使用文本編輯器可能會比較繁瑣,特別是當你只需要查看文件的內容時。這時,你可以使用
    的頭像 發表于 06-24 11:44 ?1.1w次閱讀

    linux查找文件命令

    Linux,可以使用以下命令查找文件: find 命令:可以在指定目錄及其子目錄
    的頭像 發表于 11-08 14:24 ?1251次閱讀