ファイル全体ではなく、ファイルの一部分を数行だけ表示したいことがあります。
ここではその方法をいくつか表示します。
grepでマッチした行の前後の行も表示する
grepは指定された正規表現にマッチした行を表示します。
grep 'ssh' /etc/passwd
マッチした行の前後の行も表示したい場合は「-A」「-B」「-C」のオプションを使います。これらのオプションには、表示したい行数を続けて指定します。
「-A」はマッチした行の後の行も表示、「-B」はマッチした行の前の行も表示、「-C」はマッチした行の前後の行を表示します。
$ grep -A 2 'ssh' /etc/passwd $ grep -B 2 'ssh' /etc/passwd $ grep -C 2 'ssh' /etc/passwd
この例で「-A」の指定はマッチした行とその後の2行(計3行)を表示し、「-B」の指定はマッチした行とその前の2行(計3行)を表示し、「-C」はマッチした行の前2行と後2行(合計5行)を表示します。
長いオプションを知っていると上記の短いオプションも思い出しやすいでしょう。長いオプションを使うとそれぞれ次のようになります。
$ grep --after-context=2 'ssh' /etc/passwd $ grep --before-context=2 'ssh' /etc/passwd $ grep --context=2 'ssh' /etc/passwd
特定の行を表示する
表示する行が何行目かわかっていれば次のように表示できます。
$ sed -n '3p' /etc/passwd
sedに「-n」オプションを指定すると行を処理した結果を標準出力に出力しなくなります。このとき、行を表示したければ「p」編集コマンドを明示的に指定する必要があります。
したがってここでは3行目に対して「p」コマンドだけが指定されているので、3行目がそのまま表示されます。
次のように数値をコンマ(,)で区切って行の範囲を指定することもできます。
$ sed -n '3,5p' /etc/passwd
これは3行目から5行目までを表示します。
特定の行から末尾までを表示する
特定の行から末尾までを表示する場合、まず思いつくのはtailコマンドを使うことです。
$ tail -n 5 /etc/passwd
しかし、tailコマンドを使う場合は事前に行数を把握し、最後の何行を表示するか計算しなければなりません。
これもsedを使った方が簡単です。
$ sed -n '7,$p' /etc/passwd
「$」は最終行を表すので、これは7行目から最後の行までを表示します。
まとめ
ここで紹介した以外にも方法はいくつもあります。是非、自分の気に入った方法を見つけてみてください。
ここではファイルの特定の行を表示しましたが、grepやsedはファイルを指定しなければ標準入力から行を読み込みますので、パイプで渡された入力に対しても同様に実行できます。
「他にもこんな表示ができたらいいのに」というものがあればご連絡いただければと思います。