使用循環檢查檔案中的字串

使用循環檢查檔案中的字串

我試圖循環遍歷目錄中以for語句中指定的字串開頭的檔案。在循環中,我想搜尋foo文件中的模式字串。如果在文件中找到該字串,我echo想要$filename.

#!/ppp/bash

for filename in $(find ~/filesList -type f -name "pge_*")
do
      #If 'foo' located echo $filename
      
done

任何建議將不勝感激。

答案1

用於find執行grep

find ~/filesList -type f -name 'pge_*' -exec grep -lF -- foo {} +

-l列出包含 . 符合項目的檔案的名稱foo-F意味著表達式foo將被視為固定字串而不是正規表示式。

答案2

第一個建議 - 不需要findfor循環中使用,它會減慢速度。您可以改為執行以下操作:

for f in ~/filesList/pge_*

一個相當重要的警告是,這個簡化版本不會搜尋子目錄,~/filesList而該find版本會搜尋子目錄,因此根據您的實際用例,您可能無法簡化。

至於在這些文件中的搜索,您需要使用一種grep構造:

if (grep needle haystack > /dev/null 2>&1)
then
  echo $f
fi

grep找到它正在尋找的針時,它會傳回一個非零值,因此條件評估為 TRUE。我使用 來> /dev/null 2>&1避免看到 的結果grep。如果grep大海撈針,則回傳碼為0,因此條件為FALSE,繞過該then語句。

相關內容