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マクロなどでファイルを新規作成するとき位しか役に立たないだろう。
ちなみに、引数に「-(ハイフン)」を指定することで、複数のファイルを指定していても標準入力を含める事が可能。