端末出力の行数を数える


265

SOでこれを見つけることができませんでした。ターミナルで次のコマンドを実行しました。

>> grep -Rl "curl" ./

これにより、キーワードcurlが発生するファイルのリストが表示されます。ファイル数を数えたいのですが。私が考えることができる最初の方法は、ターミナルに入ってきた出力の行数を数えることです。どうやってやるの?


40
grep自体にも-c、カウントを返すだけのフラグがあります
EaterOfCode

回答:


476

line count)スイッチをwc使用して結果をパイプします-l

grep -Rl "curl" ./ | wc -l

1
私は使用してきましたがgrep "" -c、これはかなり良いものです:)
ninhenzo64 '15

3
wcへのパイプのこのトリックは、grep出力だけでなく、すべての出力で機能することに注意してください。たとえば、git diffと組み合わせることができます。
ジェイソンL.

1
なぜこれが受け入れられた答えなのですか?一部のコメントで言及されているようにgrep -c、出力を別のプログラムにパイプする代わりに、組み込み関数を使用する必要があります。たとえば、Word文書の文字をWord以外のテキストエディタで変更しないこともできますか。
マイケルP

57

EaterOfCodeのコメントをここに回答として入力します。

grep自体にも、カウントを返す-cフラグがあります。

したがって、コマンドと出力は次のようになります。

$ grep -Rl "curl" ./ -c
24

編集:

ただし、この回答は短くなる可能性があるため、受け入れられた回答(つまりを使用wc)よりも良いように見える場合があります。私はもうこれに同意しません。パイプラインで行を数えるwc -lことができることは、他のプログラムでも使用できるので、はるかに便利であることを覚えているような気がgrepします。


5

最後の行が改行で終わっている場合( 'wc'へのパイピングは、最後の行が改行で終わっている場合によくわかります(
ただし、この場合はそうなります)。ただし、最後の行が改行で終わっていない場合、 'wc -l'は誤った結果を返します。

例えば:

$ echo "asd" | wc -l

戻ります1と、

$ echo -n "asd" | wc -l

戻ります 0


だから私がよく使うのは grep <anything> -c

$ echo "asd" | grep "^.*$" -c
1

$ echo -n "asd" | grep "^.*$" -c
1

これは何wc -lが戻るかより現実に近いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.