簡體   English   中英

搜索文件中帶有特定文本的行並輸出文件名(文件命令和grep)

[英]Search for lines with specific text in files and output file names (file command and grep)

我知道這個問題對某些人來說可能很簡單,但是我嘗試了幾種組合並用Google搜索很多,但沒有成功。

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

例如,我在目錄a,b,c,d中有一個名為“ THEFILE.txt”的文件。 我在具有這些作為子目錄的目錄中。 在每個“ THEFILE.txts”中,我正在尋找具有以下模式的行:“具有此屬性等等嗎?_apple”。 因此,我對此行的確切了解是,它以“具有此屬性”開頭,以“ _apple”結尾。

我試過了:

  1. 找 。 -name'THEFILE.txt'-exec grep -l'具有此屬性'{} \\; 這可行,但是我得到的每一行都帶有“具有此屬性”。 我只想要結尾為_apple的

  2. 所以我嘗試了:查找。 -name'THEFILE.txt'-exec grep -l'具有此屬性* _apple'{} \\; //不起作用,從我的Google搜索中,我不希望如此。

  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 $'//說的文件是標准輸入

預期的輸出:(例如文件a和c具有所需的行)

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

您的嘗試2.快到了。 稍作調整:

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

它比遞歸grepping更精確且更簡單(無管道)。

上面的方法起作用的原因(與grep -l相反)是因為-exec動作的計算結果是其命令的退出狀態。 grep找到了所要查找的內容,它將以0狀態退出(這是true ),這將使-exec yield true ,從而使下一個動作( -print )也被執行。

您可以只使用grep -r,如果只需要文件名,則將其通過管道傳輸到awk中。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM