今回はファイルの中身を見たり検索したりしてみよう。

まず事前に中身のあるファイルを用意する。

全て見知らぬコマンドを利用しているが今回はこの説明は割愛する。

1
2
3
4
5
6
7
8
9
10
11
12
# seq -w 1 10 >sample1.txt
# cat sample1.txt
01
02
03
04
05
06
07
08
09
10

cat

主にファイルの内容を表示するために利用する。

1
2
3
4
5
6
7
8
9
10
11
# cat sample1.txt
01
02
03
04
05
06
07
08
09
10

head

先頭10行を表示する。
-n numberのオプションを指定することで、指定行数表示する。

1
2
3
4
5
6
# head -n5 sample1.txt
01
02
03
04
05

tail

末尾10行を表示する。
-n numberのオプションを指定することで、指定行数表示する。

1
2
3
4
5
6
# tail -n5 sample1.txt
06
07
08
09
10

grep

検索文字列に一致する行を検索して出力する。正規表現も利用可能。

例: sample1.txtの中から1という文字が入っている行を表示する。

1
2
3
# grep 1 sample1.txt
01
10

| (パイプ)

複数の処理の入出力をつなぐための仕組み。

例: sample1.txtの中から先頭5行の中から1という文字が入っている行を表示する。

1
2
# head -n5 sample1.txt | grep 1
01

パイプを使うことでより絞り込んだ検索をすることができるようになる。

高機能なgrep

grepには大量にオプションがある。(詳細は man grep で確認!)

その中でも特に便利なオプションを紹介しておく。

  • --color

    検索文字列に色をつけて表示する。

  • -c

    検索にマッチした行をカウントする。

  • -number

    検索にマッチした前後number行を表示する。

  • -A number

    検索にマッチした行からnumber行下を表示する。

  • -B number

    検索にマッチした行からnumber行上を表示する。

  • -e

    パターンマッチを指定して検索ができる。

    例: sample1.txtの中から1または2の文字を含む行を表示する。

    1
    2
    3
    4
    # grep -e 1 -e 2 sample1.txt
    01
    02
    10
  • -v

    指定した文字列にマッチしない行を表示する。

  • -i

    大文字小文字を区別しない。

なお、grepはもっと機能があり、是非manでチェックしてもらいたい。
また、パイプでつげて、grepを複数書くこともできる(少しぶかっこうではあるが)。
まずは、目的のものを思い通りに表示できる手法を身につけ、そこからスマートなやり方を考えると時間はかかるかもしれないが着実にものにすることができるだろう。