grep 是一個很常見也很常用的指令,他最重要的功能就是進行字串資料的比對,然後將符合使用者需求的字串列印出來。 需要說明的是『grep 在資料中查尋一個字串時,是以 "整行" 為單位來進行資料的擷取的!』也就是說,假如一個檔案內有 10 行,其中有兩行具有你所搜尋的字串,則將那兩行顯示在螢幕上,其他的就丟棄了!

在關鍵字的顯示方面,grep 可以使用 --color=auto 來將關鍵字部分使用顏色顯示。這可是個很不錯的功能啊!但是如果每次使用 grep 都得要自行加上 --color=auto 又顯的很麻煩~ 此時那個好用的 alias 就得來處理一下啦!你可以在 ~/.bashrc 內加上這行:『alias grep='grep --color=auto'』再以『 source ~/.bashrc 』來立即生效即可喔! 這樣每次執行 grep 他都會自動幫你加上顏色顯示啦!

一些範例如下

[root@www ~]# grep [-A] [-B] [--color=auto] '搜尋字串' filename
選項與參數:
-A :後面可加數字,為 after 的意思,除了列出該行外,後續的 n 行也列出來;
-B :後面可加數字,為 befer 的意思,除了列出該行外,前面的 n 行也列出來;
--color=auto 可將正確的那個擷取資料列出顏色

範例一:用 dmesg 列出核心訊息,再以 grep 找出內含 eth 那行
[root@www ~]# dmesg | grep 'eth'
eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10
eth0: Identified 8139 chip type 'RTL-8139C'
eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1
eth0: no IPv6 routers present
# dmesg 可列出核心產生的訊息!透過 grep 來擷取網路卡相關資訊 (eth) ,
# 就可發現如上資訊。不過沒有行號與特殊顏色顯示!看看下個範例吧!

範例二:承上題,要將捉到的關鍵字顯色,且加上行號來表示:
[root@www ~]# dmesg | grep -n --color=auto 'eth'
247:eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10
248:eth0: Identified 8139 chip type 'RTL-8139C'
294:eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1
305:eth0: no IPv6 routers present
# 你會發現除了 eth 會有特殊顏色來表示之外,最前面還有行號喔!

範例三:承上題,在關鍵字所在行的前兩行與後三行也一起捉出來顯示
[root@www ~]# dmesg | grep -n -A3 -B2 --color=auto 'eth'
245-PCI: setting IRQ 10 as level-triggered
246-ACPI: PCI Interrupt 0000:00:0e.0[A] -> Link [LNKB] ...
247:eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10
248:eth0: Identified 8139 chip type 'RTL-8139C'
249-input: PC Speaker as /class/input/input2
250-ACPI: PCI Interrupt 0000:00:01.4[B] -> Link [LNKB] ...
251-hdb: ATAPI 48X DVD-ROM DVD-R-RAM CD-R/RW drive, 2048kB Cache, UDMA(66)
# 如上所示,你會發現關鍵字 247 所在的前兩行及 248 後三行也都被顯示出來!
# 這樣可以讓你將關鍵字前後資料捉出來進行分析啦!

資料參考:鳥哥的linux

arrow
arrow
    文章標籤
    linux grep
    全站熱搜

    Johnson峰 發表在 痞客邦 留言(0) 人氣()