Bash

使用循環檢查文件中的字元串

  • October 22, 2021

我正在嘗試遍歷以for語句中所述的字元串開頭的目錄中的文件。在循環中,我想在文件中搜尋模式字元串foo。如果在我想要的文件中找到該echo字元串$filename

#!/ppp/bash

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

任何建議將不勝感激。

第一個建議 - 沒有必要find在你的for循環中使用,它會減慢速度。您可以改為執行以下操作:

for f in ~/filesList/pge_*

一個相當重要的警告是,這個簡化版本不會搜尋子目錄,~/filesListfind版本會,所以根據您的實際案例,您可能無法簡化。

至於在這些文件中進行搜尋,您將需要使用一種grep構造:

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

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

用於find執行grep

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

-l列出包含foo. -F表示表達式foo將被視為固定字元串而不是正則表達式。

引用自:https://unix.stackexchange.com/questions/674367