2014-03-03

Ubuntu 用 grep 顯示符合字串的前後 n 行

阿舍有一堆文章的文字檔,阿舍想要從這些檔案中找出特定的字串,同時,也想要看到有符合的那一行的前後三行的文字,這樣,阿舍才能方便的判斷,那個檔案的文章到底是不是阿舍在找的哩 ! 阿舍一開始,還傻傻的想要寫支程式來找,後來,可能是老天有幫忙,就有給它想到來查這個 grep 指令的 man page 來看看能不能做到哩 !

阿舍看到這張圖的這篇文才知道,有這件事哩
(警語: 伸手做出這個動作是不當的行為哩 ! ...^^!!)

結果,原來,這個 grep 指令就有提供阿舍要的功能,就是可以指定顯示符合條件行及其前後指定行數的功能哩 ! 所以,阿舍不用自己造輪子,用 grep 現成的功能就可以哩 ! .... XD !

這個 grep 提供「A」選項來供指定顯示符合條件行之前的行數,然後,提供一個「B」選項來給人指定顯示符合條件行之後的行數,所以,以阿舍想要顯示「arthurtoday.txt」檔案裡,符合 "xyz" 字串的那一行及前、後各三行的話,就可以用下面這行指令來搜尋哩 !  ( 要注意的是,A 及 B 選項都是要大寫的哩 ! )

grep -A3 -B3 "xyz" arthurtoday.txt

上面這一行算是最簡單的用法,在實務上,阿舍要搜尋的是家目錄下的「articles」這個資料夾下的所有檔案及子資料夾的檔案,同時,要忽略大小寫,然後,把 grep 的搜尋結果產出到一個叫做「out.txt」的檔案裡,因此,阿舍就會需要用到「R」選項來要求 grep 對資料夾做遞迴式搜尋,以及用「i」選項來不分大小寫哩 !

grep -R -i -A3 -B3 "xyz" ~/articles/*.*  > out.txt

另外,Ubuntu 上的 grep 指令在顯示搜尋結果的時候,預設是會在每一行的前面加上檔案名稱的,如果不想顯示來源的檔案名稱的話,就可以多加一個小寫的「h」選項來要求不顯示檔名哩 !

grep -R -i -h -A3 -B3 "xyz" ~/articles/*.*  > out.txt

推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁