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 thought on “Linux command – grep”