【bash】ファイルから中身を抜き出すコマンド:grep, head, tail

今回はLinuxコマンドのお勉強です。
研究ではtailをよく使ったかな?


早速始めます


まずは以下のようなファイルを用意しました。

$ ls
testfile.dat

$ cat testfile.dat
1.USA
2.Japan
3.Russia
4.China
5.UK
6.Italy
7.
8.
9.
10.
11.

中身に深い意味なんてありませんよ。


grep

grepはあるファイルから特定の文字列を含む行を抜き出すコマンド。

$ grep 2 testfile.dat
2.Japan

$ grep USA testfile.dat
1.USA

ちなみに$ grep 0 testfile.datのように存在しないものを引数にしても何も返ってきません。


オプション

  • -i

引数の大文字小文字の区別なしに抜き出すことができる。

$ grep u testfile.dat
3.Russia

$ grep U testfile.dat
1.USA
5.UK

$ grep -i u testfile.dat
1.USA
3.Russia
5.UK
  • -n

引数と一致し抜き出した行に行数をつけて出力する。

$ grep -ni u testfile.dat
1:1.USA
3:3.Russia
5:5.UK
  • -v

引数のパターンと一致したものがない行を抜き出す。

$ grep -v u testfile.dat
1.USA
2.Japan
4.China
5.UK
6.Italy
7.
8.
9.
10.
11.
12.

$ grep -iv u testfile.dat  # iオプションも併用
2.Japan
4.China
6.Italy
7.
8.
9.
10.
11.
  • -c
$ grep -ci u testfile.dat
3

head

headはあるファイルの先頭から指定した行数を抜き出すコマンド。
-数字で行数を指定する。
指定しない場合には10行抜き出される。

$ head -2 testfile.dat
1.USA
2.Japan

$  head testfile.dat
1.USA
2.Japan
3.Russia
4.China
5.UK
6.Italy
7.
8.
9.
10.

オプション

  • -c

ファイルの中身の先頭から指定する数だけ文字を抜き出す。

$ head -c 10 testfile.dat
1.USA
2.Ja

tail

tailはあるファイルの末尾から指定した行数を抜き出すコマンド。

$ tail testfile.dat
2.Japan
3.Russia
4.China
5.UK
6.Italy
7.
8.
9.
10.
11.

オプション

  • -f

ファイルの末尾をリアルタイムで監視&更新。
僕の経験ではこれはかなり知ってるとお得

例えば外部のセンサーで取得しているデータファイルの中身をリアルタイムで確認できる。


今回は以上です。