所以我要做的就是找到目录内和下面的所有常规文件。对于这些常规文件中的每一个,我必须egrep for pattern($ ARG)并找出文件的输出是否与模式($ ARG)匹配,如果是,它将向计数器添加一个。
到目前为止我所拥有的是文件命令:
$count = 0
file *
然而,我无法获得egrep& ARG> / dev / null /;回声$?遍历从(file *)出现的每个文件。
我理解文件* | egrep目录> / dev / null;回声$?将输出0,因为它找到模式'目录'在文件中,但是无法让它循环遍历每个常规文件,因此每次匹配模式时我都可以向计数器添加一个。
答案 0 :(得分:1)
问题不明确,但是如果你正在寻找包含模式的文件数量
grep -l "pattern" * 2>/dev/null | wc -l
会给你这个。来自目录的错误将被忽略。
如果您想递归地执行完整的树,包括点文件
grep -r -l "pattern" | wc -l
答案 1 :(得分:0)
你可以试试这个:
counter=0
find /path/to/directory/ -type f | \
while read file
do
if grep -i -e -q "$pattern" "$file"
then counter=$((counter+1))
fi
done
echo "$counter"
答案 2 :(得分:0)
请参阅http://mywiki.wooledge.org/BashFAQ/020
counter=0
shopt -s globstar nullglob
for file in **; do
grep -qiE "$pattern" "$file" && ((counter++))
done
echo "$counter"
如果要包含隐藏文件,请添加shopt -s dotglob