grep を使用してキーワードが存在するファイルの数を取得します。 [閉じる]

grep を使用してキーワードが存在するファイルの数を取得します。 [閉じる]

一致するキーワードを含むディレクトリのファイル数を取得しようとしています。私が使用するコードは次のとおりです。

grep -r -i --include=*.sas 'keyword'- キーワードの総数を教えてくれます。

grep -l "keyword" --include="*.sas" * | wc -l- このコードは機能しません。

誰もがキーワードを含むファイルの数を取得するのに役立ちますか?

ベストアンサー1

find個人的に私は計算のためにandを一緒に使いますgrep

find . -type f -name '*.sas' -exec grep -q -e 'pattern' {} \; -exec echo x \; |
wc -l

サブディレクトリに再帰的に移動したくない場合は、-maxdepth 1最初のディレクトリの前に追加してください。-execfind

これは、現在のディレクトリまたは次のディレクトリにあるファイル名サフィックスを持つすべてのファイルで実行されますgrep -q -e 'pattern'.sas一致するファイルごとにpattern出力xが発生しますecho xechoその後、この方法で出力される行数を計算するために使用されますwc -l。ファイル名に改行文字を含めることができるので、xfilenameの代わりにesを評価します。wc

非再帰バリアントの場合は、単純なシェルループを選択することもできます。

for name in ./*.sas; do
    [ ! -f "$name" ] && continue
    grep -q -e 'pattern' "$name" && echo x
done | wc -l

または、

n=0
for name in ./*.sas; do
    [ ! -f "$name" ] && continue
    grep -q -e 'pattern' "$name" && n=$((n + 1))
done
echo "$n"

pattern正規表現ではなく文字列の場合は、代わりにそれを使用してくださいgrep -q -F -e 'string'

おすすめ記事