「grep -c ^b example」と「grep ^b example | cat -n」の違いは何ですか?

「grep -c ^b example」と「grep ^b example | cat -n」の違いは何ですか?

私はコマンドラインをよりよく学びようとしていますが、これら2つのコマンドの違いが何であるかを知りたいです。

grep -c ^b example  

そして

grep ^b example| cat –n

答え1

さて、手動でgrep

探す模様すべて文書。デフォルトでは、一致grepする行が印刷されます。

そして-cフラグを使うと:

-c, --count

通常の出力を抑制します。代わりに、各入力ファイルに対して一致する行数を印刷します。

したがって、grep -c ^b example印刷数字(カウント) パターンに一致する行を計算し、grep ^b example行自体を印刷します。

に関してはcatそれは次のように説明されています。

ファイルをリンクして標準出力として印刷

この-nフラグの機能は次のとおりです。

-n, --number    

すべての出力ラインに番号を付けます。

パイプが存在し、ファイル名がない場合はcatパイプから読み取られるため、grep出力は行番号が追加された出力です。したがって、grep ^b example| cat –n一致するすべての行が印刷され、番号が付けられます。


これは、一致する行番号が追加されるのgrep -n ^b exampleとは異なります。出力だけを見て、それに応じて行番号を付けながら、元のファイルの行番号を調べます。grepgrepcatgrep

したがって、入力ファイルが与えられた場合

$ cat example 
bar
foo
basf

私たちは:

$ grep -c ^b example 
2

$ grep ^b example |cat -n
     1  bar
     2  basf

$ grep -n ^b example
1:bar
3:basf

答え2

良いコマンド:

  1. grep -c ^b example:文字で始まる行に一致する行数を出力しb

  2. grep ^b example | cat -n:grep コマンドの結果を cat コマンドに渡し、対応する行番号をリストします。力の行番号と一緒に-nリストします。cat

例:

example.txt コンテンツ:

media sound3
media sound1
media sound2
find sound -type f -name sound[0-9] -printf 'media %f\n' > file.txt
find sound -type f -name sound[0-9] -exec bash -c 'echo media bash >> file.txt' {} \;
find sound -type f -name sound[0-9] -exec bash -c "f='{}'; echo media $( basename ${f}) >> file.txt" \;

(1)の結果:

3

(2)の結果:

1   media sound3
2   media sound1
3   media sound2

関連情報