![](/img/trans.png)
[英]Skip specific lines in text file for processing but return these lines as well in the output
[英]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”結尾。
我試過了:
找 。 -name'THEFILE.txt'-exec grep -l'具有此屬性'{} \\; 這可行,但是我得到的每一行都帶有“具有此屬性”。 我只想要結尾為_apple的
所以我嘗試了:查找。 -name'THEFILE.txt'-exec grep -l'具有此屬性* _apple'{} \\; //不起作用,從我的Google搜索中,我不希望如此。
因此,接下來我嘗試:查找。 -name'THEFILE.txt'-exec grep -l'具有此屬性[!-〜] * _ apple'{} \\; //不起作用
找 。 -name'THEFILE.txt'-exec grep'具有此屬性'{} \\; | grep'_apple $'//輸出所有匹配的行,但不輸出文件名
找 。 -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.