ファイルのすべての行と一致すると思うので、grep * filename
すべての行を印刷したいと思います。filename
*
$ cat filename
first line
second line
*
$ grep * filename #Why won't this print anything?
$
なぜできないの?
答え1
主な問題:
引用せずにシェルに直接入れる*
と、シェルはコマンドを実行する前にカレントディレクトリのファイルリストにコマンドを展開します。
2番目の用語:
grep
デフォルトでは、正規表現はパターンを一致させるために使用されます。正規表現では、*
「パターンが0回以上一致」を意味し、ピリオド(.
)は「すべての文字と一致」を意味します。
だからあなたが望むものは次のとおりですgrep ".*" filename
。またはちょうど猫を使用してください
答え2
grep ^ filename
すべての行には^と一致する先頭があるため、すべての行を印刷します。 (正規表現の実装によっては、.*を一致させるよりも効率的です。)
grep . filename
完全に空白の行(スペースやタブを含む内容のない行)を削除します。
grepはデフォルトでファイル名を印刷するため、このコマンドは複数のファイルがある場合に便利です。たとえば、私のシステムでは
grep ^ /proc/sys/kernel/shm*
生産する
/proc/sys/kernel/shmall:18446744073692774399
/proc/sys/kernel/shmmax:18446744073692774399
/proc/sys/kernel/shmmni:4096
/proc/sys/kernel/shm_next_id:-1
/proc/sys/kernel/shm_rmid_forced:0
したがって、1つのコマンドで5つの値を見ることができます。