単語を含むすべてのファイルの一致数を表示します

単語を含むすべてのファイルの一致数を表示します

/etcディレクトリ下のファイル内で「HOST」という単語を含むすべての行の一致する数だけを識別するために使用される単一のコマンドは何ですか?

一致するファイルのみをリストし、エラー メッセージは抑制する必要があります。

答え1

ファイル名と数だけをリストして一致をカウントするには、次のようにします。

grep -src HOST /etc/*

出力例:

/etc/postfix/postfix-files:1
/etc/security/pam_env.conf:6
/etc/X11/app-defaults/Ddd.3.3.11:1
/etc/X11/app-defaults/Ddd:1
/etc/zsh/zshrc:0
/etc/zsh/zshenv:0

この-cオプションは通常の出力を抑制し、各ファイルの一致数を出力します。

カウントがゼロのファイルを抑制したい場合:

grep -src HOST /etc/* | grep -v ':0$'

任意の数の入力ファイルに対して、一致する行ごとに行番号 ( -n) とファイル名 ( ) を印刷するには、次のようにします。-H

grep -srnH HOST /etc/*

出力例:

/etc/lynx-cur/lynx.cfg:254:.h2 LYNX_HOST_NAME
/etc/lynx-cur/lynx.cfg:255:# If LYNX_HOST_NAME is defined here or in userdefs.h, it will be
/etc/X11/app-defaults/Ddd.3.3.11:8005:    DDD 3.3.11 (@THEHOST@) gets @CAUSE@\n\
/etc/X11/app-defaults/Ddd:8010:    DDD 3.3.12 (@THEHOST@) gets @CAUSE@\n\

このオプションにより、指定されたディレクトリの下のすべてのレベルの各サブディレクトリ内のファイルが再帰的に検索され-rます。このオプションはエラー メッセージを抑制します。grep-s

バイナリ ファイルの一致を抑制するには、-Iオプションを使用します。

見るman grep詳細については。

答え2

1つのコマンドではなく、1行です

何かのようなもの

 grep -r ',,HOST' . | wc -l

答え3

質問の言い回しが少し変わっています。まず、すべてのファイルで一致する行の数を尋ね、次にファイル名をリストするように要求します。

すべてのファイル内の一致する行をカウントするには:

grep -R "HOST" /etc 2> /dev/null | wc -l

ファイル名を一覧表示するには:

grep -Rl "HOST" /etc 2> /dev/null

答え4

grep -c HOST *

…そうすべきです。

関連情報