站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

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

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

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

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

        grep命令語(yǔ)法

        grep命令的語(yǔ)法如下:

        grep [OPTIONS] PATTERN [FILE…]

        方括號(hào)中的項(xiàng)目是可選的。

        • OPTIONS – 零個(gè)或多個(gè)選項(xiàng)。 Grep包含許多控制其行為的選項(xiàng)。
        • PATTERN – 搜索模式。
        • FILE – 零個(gè)或多個(gè)輸入文件名。

        為了能夠搜索文件,運(yùn)行命令的用戶必須對(duì)該文件具有讀取權(quán)限。

        在文件中搜索字符串

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

        例如,要顯示/etc/passwd文件中包含字符串bash的所有行,請(qǐng)運(yùn)行以下命令:

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

        輸出應(yīng)如下所示:

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

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

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

        反轉(zhuǎn)匹配(排除)

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

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

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

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

        使用Grep過濾命令的輸出

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

        例如,要找出哪些系統(tǒng)以用戶www-data的身份在系統(tǒng)上運(yùn)行,可以使用以下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

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

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

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

        遞歸搜索

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

        要跟隨所有符號(hào)鏈接,請(qǐng)使用-R選項(xiàng)(或–dereference-recursive),而不是-r。

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

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

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

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

        如果使用-R選項(xiàng),則grep將跟隨所有符號(hào)鏈接:

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

        注意下面輸出的最后一行。 當(dāng)用-r調(diào)用grep時(shí),不會(huì)打印該行,因?yàn)镹ginx啟用站點(diǎn)的目錄中的文件是指向可用站點(diǎn)目錄中的配置文件的符號(hào)鏈接。

        /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;

        僅顯示文件名

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

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

        $grep -l linuxidc.com *.conf

        輸出將如下所示:

        tmux.conf
        haproxy.conf

        -l選項(xiàng)通常與遞歸選項(xiàng)-R結(jié)合使用:

        $grep -Rl linuxidc.com /tmp

        不區(qū)分大小寫的搜索

        默認(rèn)情況下,grep區(qū)分大小寫。 這意味著將大寫和小寫字符視為不同的字符。

        要在搜索時(shí)忽略大小寫,請(qǐng)使用-i選項(xiàng)(或–ignore-case)調(diào)用grep。

        例如,當(dāng)搜索不帶任何選項(xiàng)的Zebra時(shí),以下命令將不顯示任何輸出,即有匹配的行:

        $grep Zebra /usr/share/words

        但是,如果使用-i選項(xiàng)執(zhí)行不區(qū)分大小寫的搜索,則它將同時(shí)匹配大小寫字母:

        $grep -i Zebra /usr/share/words

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

        zebra
        zebra’s
        zebras

        搜索全詞

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

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

        $grep gnu /usr/share/words

        cygnus
        gnu
        interregnum
        lgnu9d
        lignum
        magnum
        magnuson
        sphagnum
        wingnut

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

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

        如果您運(yùn)行與上述相同的命令,包括-w選項(xiàng),則grep命令將僅返回其中包含gnu作為單獨(dú)單詞的那些行。

        $grep -w gnu /usr/share/words

        gnu

        顯示行號(hào)

        -n(或–line-number)選項(xiàng)告訴grep顯示包含與模式匹配的字符串的行的行號(hào)。 使用此選項(xiàng)時(shí),grep將匹配項(xiàng)打印到以行號(hào)為前綴的標(biāo)準(zhǔn)輸出。

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

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

        下面的輸出顯示在行10423和10424上找到匹配項(xiàng)。

        10445:ndmp            10000/tcp              # Network Data Management Protocol
        10446:ndmp            10000/udp              # Network Data Management Protocol

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

        Count函數(shù)匹配

        若要將匹配行數(shù)打印到標(biāo)準(zhǔn)輸出,請(qǐng)使用-c(或 –count)選項(xiàng)。

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

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

        輸出

        4

        安靜模式

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

        這是一個(gè)在安靜模式下使用grep作為if語(yǔ)句中的測(cè)試命令的示例:

        if grep -q PATTERN filename
        then
            echo pattern found
        else
            echo pattern not found
        fi

        Basic正則表達(dá)式

        GNU Grep具有三個(gè)正則表達(dá)式功能集,Basic、 Extended 和 perl 兼容

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

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

        使用^(插入符號(hào))符號(hào)可在行首匹配表達(dá)式。 在下面的示例中,僅當(dāng)字符串kangaroo出現(xiàn)在行的開頭時(shí)才匹配。

        $grep “^kangaroo” file.txt

        使用$(美元)符號(hào)來匹配行尾的表達(dá)式。 在下面的示例中,僅當(dāng)字符串kangaroo出現(xiàn)在行的最后時(shí)才匹配。

        $grep “kangaroo$” file.txt

        使用.(點(diǎn))符號(hào)以匹配任何單個(gè)字符。 例如,要匹配以kan開頭,然后有兩個(gè)字符并以字符串roo結(jié)尾的任何內(nèi)容,可以使用以下模式:

        $grep “kan..roo” file.txt

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

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

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

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

        要轉(zhuǎn)義下一個(gè)字符的特殊含義,請(qǐng)使用(反斜杠)符號(hào)。

        Extended正則表達(dá)式

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

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

        $grep -E -o “b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,6}b” 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選項(xiàng)僅用于打印匹配的字符串。

        搜索多個(gè)字符串(模式)

        可以使用OR運(yùn)算符|將兩個(gè)或多個(gè)搜索模式結(jié)合在一起。

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

        在以下示例中,我們正在Nginx日志錯(cuò)誤文件中搜索所有出現(xiàn)的致命,錯(cuò)誤和嚴(yán)重的單詞:

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

        如果使用擴(kuò)展正則表達(dá)式選項(xiàng)-E,則不應(yīng)轉(zhuǎn)義運(yùn)算符|,如下所示:

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

        在匹配之前打印行

        要在匹配行之前打印特定數(shù)量的行,請(qǐng)使用-B(或 –before-context)選項(xiàng)。

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

        $grep -B 5 root /etc/passwd

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

        匹配后打印行

        若要在匹配行之后打印特定數(shù)量的行,請(qǐng)使用-A(或 –after-context)選項(xiàng)。

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

        $grep -A 5 root /etc/passwd

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

        總結(jié)

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

        在Grep用戶手冊(cè)頁(yè)上,還有更多有關(guān)Grep的知識(shí)。

        如果您有任何問題或反饋,請(qǐng)隨時(shí)發(fā)表評(píng)論。

        贊(1)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 亚洲国产精品热久久| 欧美日韩国产精品自在自线| 中国精品videossex中国高清| 中文字幕无码精品三级在线电影| 99精品国产成人一区二区| 精品福利一区二区三区免费视频| 日韩一区二区三区精品| 国产精品午夜无码AV天美传媒| 1024国产欧美日韩精品| 人妻少妇精品视频二区| 欧美久久亚洲精品| 国产精品美女久久久免费| 久久九九青青国产精品| 国产精品免费一区二区三区四区| 一本久久a久久精品亚洲| 久久精品18| 国产人成精品综合欧美成人| 精品亚洲综合久久中文字幕| 国自产偷精品不卡在线| 一区二区日韩国产精品| 日本五区在线不卡精品| 久久99精品九九九久久婷婷 | 精品无码久久久久久国产 | 精品久久一区二区| 91精品国产综合久久久久久| 精品无码无人网站免费视频| 青草国产精品久久久久久| 亚洲热线99精品视频| 中文字幕精品亚洲无线码二区| 欧美日韩精品一区二区三区不卡| 久久精品国产99久久久香蕉| 国内精品久久久久久不卡影院| 国产亚洲精品a在线观看 | 亚洲精品乱码久久久久久中文字幕 | 国内精品免费视频精选在线观看| HEYZO无码综合国产精品227| 国产精品扒开腿做爽爽爽视频| 久久久久久国产精品无码超碰| 久久精品国产亚洲av水果派| 成人国产精品免费视频| 久久99国产精品久久久|