空行を数えずにファイル内の行数を数える

空行を数えずにファイル内の行数を数える

7 行のファイルがあるとします。例:

a
b
c
#

d
e

実行するとgrep -c '#' -c -v filenamehere 6 行が表示されます。

空白スペースをなくすために 5 行表示したいです。

答え1

あなたのファイルはセブン行が含まれていますが、空ではなく、で始まっていない行をカウントしたいとします#

$ grep -c '^[^#]' file
5

先頭に文字ではない文字が含まれる行の数をカウントします#

この式は[^#]、 以外の単一の文字と一致します#。完全な式は、行の先頭の^[^#]以外の文字と一致します。#

#空行はこの式に一致しません。また、 ¹で始まる行も一致しません。

空でない行だけを数えたい場合:

$ grep -c '.' file
6

少なくとも 1 つの文字を含む行をカウントします。


完全を期すために、空行を数えます。

$ grep -c -v '.' file
1

空行または で始まる行をカウントするには#:

$ grep -c -v '^[^#]' file
2

-cと は両方とも-v「グローバル」オプションであることに注意してください。これらは、コマンド ラインで指定されると、操作全体の動作を変更します。または を複数回grep指定しても意味がなく、オプション引数を取りません。-c-v

また、パターンまたは正規表現をすべてのオプションの後の最初の引数以外の場所で指定する場合は、これが検索するパターンであると認識されるよう-e 'pattern'に、を使用してください。つまり、grep

grep -e '.' -c -v file

または

grep -c -e '.' -v file

または

grep -c -v '.' file

GNU はgrep、オプションがパス名オペランドの前に来るようにコマンドラインを再配置します (POSIXLY_CORRECT環境変数が設定されていない場合)。ただし、通常は、どの実装でも動作する移植可能なシェル コードを記述する必要がありますgrep


¹ 文字以外 (ユーザーのロケール チャーマップで有効な文字を形成しないバイト シーケンス) で始まる行も、ほとんどのgrep実装では除外されます。これを回避するには、 を使用できますLC_ALL=C grep。これは、ポータブル文字セットの一部であるため、特定のシステムのロケール間で不変であるはずなので、有効な操作であるはずです#

関連情報