2013-10-08 44 views
0

我知道這個問題可能對你們中的一些人來說很簡單,但我嘗試了幾種組合並且搜索了很多,沒有成功。在文件和輸出文件名(文件命令和grep)中搜索具有特定文本的行

問題:我有一堆給定文件名的文件,但在不同的目錄中。

例如,我在目錄a,b,c,d中有一個名爲'THEFILE.txt'的文件。我在一個包含這些子目錄的目錄中。在'THEFILE.txts'中的每個'我正在尋找具有以下模式的行:'有這個屬性等等等等等等。所以我對這條線肯定知道的是,它以'擁有這個屬性'開始,以'_apple'結尾。

我想:

  1. 發現。 -name'THEFILE.txt'-exec grep -l'有這個屬性'{} \; 這個工作,但我得到'擁有這個屬性'的每一行。我只想用_apple結尾

  2. 所以我試過了: 找到了。 -name'THEFILE.txt'-exec grep -l'擁有此屬性* _apple'{} \; //不起作用,從我的谷歌搜索,我不指望它。

  3. 那麼,接下來我試過了: 找不到。 -name'THEFILE.txt'-exec grep -l'擁有此屬性[! - 〜] * _ apple'{} \; //不起作用

  4. 找不到。 -name'THEFILE.txt'-exec grep'有這個屬性'{} \; | grep'_apple $' //此輸出所有匹配的行,但不是文件名

  5. 查找。 -name'THEFILE.txt'-exec grep'有這個屬性'{} \; | grep的-l '_apple $' //說文件標準輸入

預期輸出:(比如文件和C具有所需的線)

./a/THEFILE.txt 
./c/THEFILE.txt 

回答

0

你可以只用grep -r,和如果你只想要文件名,將它管入awk。

grep -r "_apple$" . | awk -F: '{print $1}'

+0

嗨託尼,感謝您的回覆,但我需要在開頭有「此屬性」和結尾處有「_apple」的行。你的soln只匹配1個condn,我已經知道如何做 –

+0

所以,只需更新正則表達式以匹配你想要的:'grep -r「^擁有這個屬性。* _ apple $」。| awk -F:'{print $ 1}'' – tlm

+0

謝謝,這完全解決了我的問題。我真的需要學會更好地使用正則表達式。 –

1

您試圖2.是幾乎沒有。稍作調整:

find . -name THEFILE.txt -exec grep -q '^Has this property.*_apple$' '{}' ';' -print 

它比遞歸grepping和更簡單(沒有管道)更精確。

上述工作原因(與grep -l相反)是因爲-exec動作的計算結果爲其命令的退出狀態。 grep如果找到它所查找的內容,將會以0狀態(即true)退出,這將使-exec產生true,並且這又會導致下一個操作(-print)也被採用。

相關問題