2,982 瀏覽數

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

#grep -i

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

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

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

#grep “^"

如果要找的資料一定在字行首時, 請使用 “^" (指匹配的字符串在行首)

root@ubuntu:~# cat /etc/passwd |grep "^ben"
ben:x:1000:1000:Ben,,,:/home/ben:/bin/bash

#grep -l

grep 一次只能找一個檔案,如果你要找某個目錄下所有的檔案,這時需要透過 find + grep -l (-l :files with matches) 指令的配合,比如你要在 /root 目錄下搜尋所有包含 Ben 字串的檔案.可以用下面方法來實現.

[root@benjr root]# find /root/* -exec grep -l Ben {} \;

參數 -exec 將之前的結果轉向 grep -l Ben 來處理 , {} 表示之前的結果 , \; 結束.
grep -l (-l :files with matches)

#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 -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 都被搜尋出來了.

#grep -E

如果要搜尋的字串有多種可能(有可能已經忘記正確字串的名字),這時候就可以使用 #egrep (等同 #grep -E) ,直接來看下面的例子.他會找出 nofork 或是 nogroup 的字串.

root@ubuntu:~# grep -E '^no(fork|group)' /etc/group
nogroup:x:65534:

grep 也是可以直接用不用參數,不過要搜尋的字尾要加入 \

root@ubuntu:~# grep '^no\(fork\|group\)' /etc/group
nogroup:x:65534:

其他應用 Linux command – ls 列出目錄及檔案數量

發表迴響