2014-02-25 27 views
0

我想知道我需要編輯的文件,它們遵循一個模式,它很容易使用grep(grep -rnw . -e "text")進行搜索,但它返回幾次相同的文件路徑爲每個比賽。搜索只是一個爲每個文件

我該如何避免它?

例子:

./rnaspace_cli.py:41:from rnaspace.core.id_tools import id_tools 
./rnaspace_cli.py:42:from rnaspace.core.sequence import sequence 
./rnaspace_cli.py:44:from rnaspace.core.trace.event import add_seq_event 
./rnaspace_cli.py:45:from rnaspace.core.trace.event import disk_error_event 
./rnaspace_on_web:33:from rnaspace.ui.web.controller.rnaspace_controller import rnaspace_controller 

所需的輸出:

./rnaspace_cli.py:41:from rnaspace.core.id_tools import id_tools 
./rnaspace_on_web:33:from rnaspace.ui.web.controller.rnaspace_controller import rnaspace_controller 

甚至更​​好只是路徑和文件:在grep的

./rnaspace_cli.py 
./rnaspace_on_web 

回答

3

從grep的手冊頁:

-l, --files-with-matches 
       Suppress normal output; instead print the name of each input file from which output would normally have 
       been printed. The scanning will stop on the first match. (-l is specified by POSIX.) 

所以,

grep -l 'pattern' files* 

將只顯示檔案名稱是什麼包含一個模式

+0

對不起,我聽不懂以及手冊,我認爲這個名字只是文字的名字而不是路徑。 – Llopis

+2

@Llopis的名字將與grep一樣得到迴應。因此,'grep -l'pattern'./*' - 將會打印'./file1','。/ file3'等。'grep -l'pattern'/ some/path/*'將打印'/一些/路徑/ file1'等等...... – jm666

0

使用-l選項來獲得唯一的文件名outout:

grep -lrnw . -e "text" 
1

這應該工作:

grep -rnw . -e "text" | awk -F: '{print $1}' | uniq 

編輯說明:

  • awk -F: '{print $1}' - 拆分在: -sign而且只打印第一部分
  • uniq輸出 - 顯示重複行只有一次
+0

請解釋更好的答案 –

+0

@JoeTaras我編輯我的答案 – chaos

+0

嗨,親愛的,現在這是確定 –