使用grep查找指定目錄下的關鍵字

在/etc目錄下如何查找包含’root’關鍵字的所有文件?

對於一個指定的文件來說通常使用下面的方法來查找關鍵字:

grep   'keyword'    file

如果你懂得正則表達式,那麼還可以對關鍵字作更細緻的匹配。但是利用grep查找指定目錄下的所有文件我尚不清楚,通過man手冊以及論壇求助基本解決了上面的那個問題。

1.如何遞歸查找

grep通常只能查找指定數目的文件,如果需要查找某個目錄下的所有文件必須添加-R或-r選項。這個選項比較好理解,如果我們要刪除一個非空的目錄那麼也必須對rm命令添加-r或-R選項。因此我們可以通過一下命令來完成本文一開始所提出的問題:

grep   -R   'boot'   /etc

這樣好像已經解決了問題,不過從輸出的結果來看有一些匹配並不符合我們的要求。

/etc/grub.d/README:administrator.  For example, you can add an entry to boot another OS as
/etc/grub.d/20_memtest86+:if test -e /boot/memtest86+.bin ; then
/etc/grub.d/20_memtest86+:  prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e "s/^/
\t/")"

比如第三行所匹配的root並不是一個單獨的詞,而是包含在其他字符串中。

2.完全匹配一個詞

通過上面的分析我們得知我們需要類似下面的舉例那樣匹配root關鍵字:

I am a root
root is me
I have root permission

而不是像下面這樣:

rooter is me
I am rooter
I have rooter permission

因此,我們還需要增加其他參數以達到完全匹配一個詞的目的。grep中使用-w選項來完全匹配一個單詞。因此我們的解決方法修改如下:

grep  -R  -w   'boot'   /etc

3.更友好的改進

通過上面的命令已經可以較好的解決本文一開始提出的問題了。不過,其輸出結果很長,不方便我們查看。

如果我們需要知道該關鍵字位於被查找文件的哪一行,那麼可以加入-n選項:

grep  -R  -w  -n   'boot'  /etc

有時候我們只需要知道該關鍵字包含在那個文件中,因此我們加入-l選項:

grep -R -w -l 'boot' /etc

這樣以來的確方便了查看,不過由於輸出結果在一個屏幕下不能完全顯示,因此我們可以用more命令分屏查看,或者直接將輸出結果重定位於指定的文件中:

grep -R -w -l 'boot' /etc > ./output.txt

這樣就可以方便的查看輸出結果了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章