Bash
使用循環檢查文件中的字元串
我正在嘗試遍歷以
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_*
一個相當重要的警告是,這個簡化版本不會搜尋子目錄,
~/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
語句。
用於
find
執行grep
:find ~/filesList -type f -name 'pge_*' -exec grep -lF -- foo {} +
-l
列出包含foo
.-F
表示表達式foo
將被視為固定字元串而不是正則表達式。