簡體   English   中英

如何使用ack(最好是ack)或grep來搜索文件列表中的字符串?

[英]How can I use ack (preferably ack) or grep to search for a string in a list of files?

我想在任何名為search-this-one.html的文件中搜索字符串“my-search-string”

在我當前工作目錄的所有子目錄中。

我想要一個包含此字符串的文件的完整路徑列表。 有數百個文件名為search-this-one.html,其中任意數量的文件都可以包含該字符串。

有沒有人做過這樣的成功。

我可以得到像這樣的文件列表..

find . -type f -name "search-this-one.html"

我已經嘗試了各種grep和ack開關,所有其他相關的答案只搜索與搜索字符串匹配的文件名。

你可以使用xargs

find . -type f -name "search-this-one.html" | xargs grep "my-search-string"

使用額外的-l切換到grep ,您將獲得沒有完全匹配位置的匹配文件列表。

如果你正在運行ack 2.x,你可以使用-x選項從STDIN獲取輸入,就像xargs一樣。

ack -g search-this-one.html | ack -x pattern

ack -g表示“查找名稱與search-this-one.html匹配的任何文本文件”,然后將其傳送到ack -x ,它從STDIN獲取其輸入文件列表。

也適用於使用正則表達式搜索文件名:

ack -g '\.*.conf$' | ack -x searchString

find命令中添加-exec

find . -type f -name "search-this-one.html" -exec grep "my-search-string" {} \;

因此find將輸出將執行命令grep "my_search_string"的文件名列表。

要獲取文件以及發生這種情況的事件,請將-H添加到grep

find . -type f -name "search-this-one.html" -exec grep -H "my-search-string" {} \;

無論它有什么價值,我都沒有找到使用ack做到這一點的簡潔方法,但以下工作:

ack --type-add foo:is:search-this-one.html --foo my-search-string

說明:

  • --type-add foo:is:search-this-one.html :這會添加(在這一個命令的持續時間內)一個新類型foo ,定義為名稱is search-this-one.html所有文件
  • --foo :僅搜索foo類型的文件

此外,對於@fedorqui等人,您可以使用-exec cmd {} +選項進行查找, 運行之前將所有匹配的文件名放入命令中,避免需要-H標志:

find . -name search-this-one.html -type f -exec grep "my-search-string" {} +

暫無
暫無

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

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