catコマンドで覚えておきたい使い方6個

LinuxやUNIXを使ってれば、必ず使うcatコマンド。 単純にファイルの中を見るだけのコマンドなので、自分もその動作をあまり調べてなかった。

今回は、そんなcatコマンドで覚えておきたい使い方をまとめてみる。 なお、検証に利用したOSはCentOS 7になる。

1.基本の使い方

基本的な使い方…と言っても説明するまでもなさそうだが、以下のように参照ファイルを指定することで、そのファイルの中身を出力させる事が出来る。

$ cat test1.txt
aaaaaaa
nnnnnnn
vvvvvvv
sssssss
sasasas
eefraga
asafaea

リダイレクトを用いる事で、catで出力される内容を別のファイルに書き出す事も可能だ。

$ ls
test1.txt  test2.txt
$ cat test1.txt > test3.txt
$ ls
test1.txt  test2.txt  test3.txt
$ cat test1.txt
aaaaaaa
nnnnnnn
vvvvvvv
sssssss
sasasas
eefraga
asafaea
$ cat test3.txt
aaaaaaa
nnnnnnn
vvvvvvv
sssssss
sasasas
eefraga
asafaea
$

2.行番号を表示させる

nオプションを付与することで、catで出力した内容に対し、行番号を表示させることも出来る。

$ cat test1.txt
aaaaaaa
nnnnnnn
vvvvvvv
sssssss
sasasas
eefraga
asafaea
$ cat -n test1.txt
     1  aaaaaaa
     2  nnnnnnn
     3  vvvvvvv
     4  sssssss
     5  sasasas
     6  eefraga
     7  asafaea
$

なお、以下のような空白行を持つファイルに対し、空白行を含めずに行番号を出力するには、bオプションを用いる。

$ cat -n test6.txt
     1  aaaaaaaaa
     2
     3
     4
     5  sssssssss
     6  d
     7  f
     8  ffffffffff
     9
    10  ggggggggg
    11
    12
    13
    14
    15
    16  gagagagaga
    17
$ cat -b test6.txt
     1  aaaaaaaaa

     2  sssssssss
     3  d
     4  f
     5  ffffffffff

     6  ggggggggg

     7  gagagagaga

$

3.連続した空白行を短縮して出力する

連続した空白行があるファイルの場合は、sオプションを利用することで短く出力することが出来る。

$ cat -u test6.txt
aaaaaaaaa

sssssssss
d
f
ffffffffff

ggggggggg

gagagagaga

$ cat -s test6.txt
aaaaaaaaa

sssssssss
d
f
ffffffffff

ggggggggg

gagagagaga

$

4.非表示文字を出力する

Tオプションを用いる事で、Tabを「^I」で出力させる。また、その他の非表示文字はvオプションで出力させることができる。

$ cat test2.txt
gafdagaga
afwshaja
fahshjrshjr
fagshsrv t
hehethrjna
        gsghfsdhdhjs
gsgsgwsgs
        fageshyrhyr

        gshsrhdje
        hsdrhtdjdj
        dheja

fafasfafa

afafafa
$ cat -Tv test2.txt
gafdagaga
afwshaja
fahshjrshjr
fagshsrv t
hehethrjna
^Igsghfsdhdhjs
gsgsgwsgs^I
^Ifageshyrhyr

^Igshsrhdje
        hsdrhtdjdj
^Idheja

fafasfafa

afafafa^H^H^H^H^H^H^[
$

2017/12/23 追記

ちなみに、表示されるようになった非表示文字の意味だが、wikipediaのASCIIの記事に一覧がある。 (キャレット記法(CS)の列がそれ)

5.複数ファイルの連続表示

引数に複数のファイルを指定することで、ファイルの中身を連続して出力させることも可能だ。

$ cat test.txt
gagahrshrht
gagegegrghtr
ghjgfjhfky
kykukgkfgky

$ cat test1.txt
aaaaaaa
nnnnnnn
vvvvvvv
sssssss
sasasas
eefraga
asafaea
$ cat test.txt test1.txt
gagahrshrht
gagegegrghtr
ghjgfjhfky
kykukgkfgky

aaaaaaa
nnnnnnn
vvvvvvv
sssssss
sasasas
eefraga
asafaea
$

リダイレクトを用いる事で、複数ファイルを結合した、新しいファイルを作成することも出来る。

$ ls
test.txt  test1.txt  test2.txt  test3.txt
$ cat test.txt test1.txt > test4.txt
$ ls
test.txt  test1.txt  test2.txt  test3.txt  test4.txt
$ cat test4.txt
gagahrshrht
gagegegrghtr
ghjgfjhfky
kykukgkfgky

aaaaaaa
nnnnnnn
vvvvvvv
sssssss
sasasas
eefraga
asafaea
$

6.エディタとして利用する

あまり使うことが無いかも知れないが、catコマンドでファイルを新規に作成することも出来る。 余談だが、天才プログラマーと言われたビル・ジョイの場合、エディタは使わず、このcatの機能を用いていた…と2chで言っていた(ホントか?)

$ cat > test5.txt
aaaaaaaa
bbbbbbbb
cccccccc
dddddddd(処理を抜けるため、Ctrl + D)
$ cat test5.txt
aaaaaaaa
bbbbbbbb
cccccccc
dddddddd
$

なお、バックスペース等は効かないため、一度記述したらもう書き直せないので注意。 Teratermマクロなどでファイルを新規作成するとき位しか役に立たないだろう。

ちなみに、引数に「-(ハイフン)」を指定することで、複数のファイルを指定していても標準入力を含める事が可能。