のマニュアルページには次のようにgrep
書かれています:
-c
,--count
: 通常の出力を抑制し、代わりに各入力ファイルの一致する行の数を出力します。
与えられた:
# grep -R -c sleeping /proc/*/status
カウントではなくリストを取得します (次の場合と同様)。
# grep -R sleeping /proc/*/status | wc -l
はどうなっているのでしょうかgrep -c
? カウントを取得せずに代わりに を使用するには、(上記のコマンドで) 何をすればよいのでしょうかwc -l
?
答え1
grep -c
各入力ファイルごとに一致する行の数を個別に表示します (これは実際にマニュアルからの引用で述べられていることです):
$ grep -c user chmod.1 chown.1
chmod.1:20
chown.1:5
つまり、chmod.1
20 個の一致があり、chown.1
5 個あります。
ここでのファイル名のリスト表示は通常の grep と同様に機能します。つまり、入力ファイルが複数ある場合はファイル名がリストされますが、入力ファイルが 1 つしかない場合はリストされません。少なくとも GNU grep では、これは および-H
フラグで変更できます-h
。
それで、
$ grep -c user chmod.1
20
$ grep -cH user chmod.1
chmod.1:20
答え2
合計数を求めるには、ファイルごとの数を報告しない、cat
それほど役に立たない使用法を使用します。grep
-bash-4.2$ cat /proc/*/status | grep -c sleeping
171
-bash-4.2$ grep sleeping /proc/*/status | wc -l
171
-bash-4.2$