3,646 瀏覽數

Linux command – grep

grep 是在 Linux 蠻常用的指令,主要是在一群文字資料裡搜尋 Keyword 關鍵字在哪一行.

#grep

先小試一下在 /etc/passwd 裡面找 root 這個關鍵字在哪裡

root@ubuntu:~# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash

下面的方式同前範例.

root@ubuntu:~# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash

也可以同時指定多個檔名,搜尋結果會在行的最前面顯示檔案名稱.

root@ubuntu:~# grep root /etc/passwd /etc/group
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/group:root:x:0:

* 代表目前路徑下的所有檔案都進行搜尋.

root@ubuntu:~# grep root *
b.txt:Linux Foundation 1.1 root hub 
b.txt:Linux Foundation 2.0 root hub 

#grep -v

如果是要找不含某字串的時候就可以使用 -v , –invert-match

root@ubuntu:~# grep -v root /etc/passwd 

#grep -n

-n , –line-number 在行的最前面標示出該行是在文章的的第幾列.

root@ubuntu:~# cat /etc/passwd | grep -n root
1:root:x:0:0:root:/root:/bin/bash

#grep -i

在 Linux 大小寫是有差別的,如果你要找的關鍵字有可能是大寫也有可能是小寫時,建議加上 -i 來搜尋

root@ubuntu:~# grep -i root /etc/passwd

這樣不管 Root , ROOT , RooT 只要符合這四個字元的都會被找到.

#grep -c

-c , –count 計算出符合 搜尋 Keyword 的行數.

root@ubuntu:~# ps -ef|grep ssh
root        975      1  0 Jun28 ?        00:00:00 /usr/sbin/sshd -D
root       2491    975  0 Jun28 ?        00:00:00 sshd: ben [priv]
ben        2571   2491  0 Jun28 ?        00:00:00 sshd: ben@pts/18
root       5498   2620  0 01:24 pts/18   00:00:00 grep --color=auto ssh
root@ubuntu:~# ps -ef|grep -c ssh 
4

#grep -l

-l , –file-with-matches 列出符合 搜尋 Keyword 的檔案名稱.
這個參數通常用於要找很多檔案,雖然 grep 可以指定多個檔案,但要一一輸入太麻煩,比如要找某個目錄下所有的檔案,這時需要透過 find + grep -l (-l :files with matches) 指令的配合,比如你要在 /root 目錄下搜尋所有包含 Ben 字串的檔案.可以用下面方法來實現.

root@ubuntu:~# find /root -type f -exec grep -l Ben {} \;
/root/.bash_history
/root/passwd
/root/hardinfo_report.html

find 參數
-type f
找出屬性為檔案 f (file) ,還可針對目錄 d (directory) -type d ,連結 l (softlink) -type l來尋找.
-exec
將之前的結果轉向 grep -l Ben 來處理 , {} 表示之前的結果 , \; 結束.

#grep -f

如果你要同時搜尋多個關鍵字,可以用 #fgrep (等同 #grep -F) ,比如 我要同時搜尋 root , ben , www-data . 先將這幾個關鍵字寫成檔案, user_list.txt 檔案裡面是即將搜尋的字串集.

root@ubuntu:~# cat user_list.txt 
root
ben
www-data

我們來搜尋看看 /etc/group 是不是有 root, ben , www-data 這幾個字串.

root@ubuntu:~# grep -f user_list.txt /etc/group
root:x:0:
adm:x:4:syslog,ben
cdrom:x:24:ben
sudo:x:27:ben
dip:x:30:ben
www-data:x:33:
plugdev:x:46:ben
lpadmin:x:108:ben
ben:x:1000:
sambashare:x:124:ben

果然檔案內有 root, ben , www-data 都被搜尋出來了.

One Reply to “Linux command – grep”

  1. 自動參照通知: Linux command – sed – Benjr.tw

發表迴響