[Linux] cat コマンドの使い方

[Linux] cat コマンドの使い方

cat コマンド

cat コマンドの使い方をまとめます。猫(cat)のではなく連結(catenate)に由来するコマンド名です。

ファイルの内容を確認するために、cat コマンドでファイル内容を標準出力に表示したりするために使うことが多いです。

基本のファイル内容を表示するいろいろ

ファイル内容を標準出力に表示する

cat [ファイルパス]

cat コマンドにファイルパスを渡すとそのファイルの中身を標準出力に表示してくれます。

# 確認用のファイルを作る
$ echo hoge > hoge.txt

# ファイルを出力
$ cat hoge.txt
hoge

複数のファイルを連結して表示する

cat FILE1 FILE2 ...

cat コマンドには複数のファイルを渡すことが可能です。複数のファイルを連結した結果を表示します。

# 確認用のファイルを作る
$ echo hoge > hoge.txt
$ echo foo > foo.txt

# ファイルを連結して出力
$ cat hoge.txt foo.txt
hoge
foo

リダイレクトと合わせてファイルを結合して保存

ファイル1 と ファイル2 を結合して1ファイルにまとめるというときは cat コマンドとリダイレクトを組み合わせればよいです。

$ echo abc > abc.txt
$ echo def > def.txt

# ファイル連結結果をファイルにリダイレクトして保存
$ cat abc.txt def.txt > abcdef.txt

$ cat abcdef.txt
abc
def

-: 標準入力の内容を出力

$ cat -
abc
abc
# Ctrl+D で標準入力を終了

cat コマンドにファイルパスではなく - を指定すると、標準入力から受けとった内容を表示します。実行後に入力を受け付けるようになります。

このままでは何に使うか微妙ですが、複数のファイルを連結するときに使えます。

# 確認用のファイルを作る
$ echo a > a.txt
$ echo c > c.txt
# a.txt, b\n, c.txt を連結して abc.txt に出力
$ cat a.txt - c.txt > abc.txt
b

# 確認
$ cat abc.txt
a
b
c

オプション

-n: 行番号を表示する

-e オプションを使用することで、出力時に行番号を合わせて表示できます。

$ echo -e 'a\nb\nc\nd\ne' > input.txt
$ cat -n input.txt
     1  a
     2  b
     3  c
     4  d
     5  e

-T: タブ文字を ^I で表示する

-T オプションを使用することで、出力時にタブ文字を ^I で表示します。スペースとタブ文字を区別して確認したいときに使うと便利です。

$ echo -e 'a\tb\tc' > input.txt
$ cat input.txt
a       b       c

# -T を付けた結果
$ cat -T input.txt
a^Ib^Ic

-v: 印字されない特殊文字を表示する

-v オプションを使用することで、出力時にタブ文字とラインフィード(\n)以外の印字されない特殊文字を表示します。

# \t, \r, \n, \a を含むテキストファイル
$ echo -e 'a\tb\r\nc\ad' > input.txt

# 改行(\n)とタブ(\t)以外の特殊文字が印字されている
$ cat -v input.txt
a       b^M
c^Gd

これも -T オプションと同じく確認用とで用いるオプションです。

-t: -v と -T を合わせたオプション

-t オプションは -v-T を合わせて指定した場合と同様の効果が得られるオプションです。

# \t, \r, \n, \a を含むテキストファイル
$ echo -e 'a\tb\r\nc\ad' > input.txt

# \n 以外が印字される
$ cat -t input.txt
a^Ib^M
c^Gd
c^Gd

-s: 連続する空白行を1行にまとめる

-s オプションを使用すると、連続する空白行が1行にまとめて出力できます。

# 空白行が連続するデータ
$ echo -e 'a\n\n\nb\n\n\nc' > input.txt
$ cat -s input.txt
a

b

c

-E: 行末を $ で表示する

-E オプションを使用すると、行末に $ を表示します。改行を $ に置換するわけではありませんのでご注意ください。

改行位置を明示するために使用します。

$ echo -e '1\n2\n3' > input.txt
$ cat -E input.txt
1$
2$
3$

-A: -v と -E と -T で全部表示する

-A オプションを使用すると、-vET を指定したのと同じ効果が得られます。本来印字されない文字をすべて印字します。

# \t, \r, \n, \a を含むテキストファイル
$ echo -e 'a\tb\r\nc\ad' > input.txt

# -A ですべての特殊文字を印字する
$ cat -A input.txt
a^Ib^M$
c^Gd$

tac コマンドは cat の逆

tac コマンドはファイル最終行から逆順で表示します。

cat を反対から読んで tac コマンドです。ファイルの末尾行から逆に出力するから tac です。わかりやすいですね。

$ echo -e '123\n456\n789' > input.txt

# tac でファイル最終行から出力
$ tac input.txt
789
456
123
# cat でファイル先頭行から出力
$ cat input.txt
123
456
789

行単位で逆順出力するだけで、行の中身は先頭から出力されます。文字単位でも逆順で出力したい場合は後述の rev を合わせて使用します。

rev コマンドと併せてファイル最終文字から逆順表示

rev コマンドはファイルを指定して行の内容を逆順で表示します。

$ echo -e '123\n456\n789' > input.txt

$ rev input.txt
321
654
987

tacrev をパイプでつないで実行すればファイル全体を逆順で表示できます。

$ echo -e '123\n456\n789' > input.txt

$ tac input.txt  | rev
987
654
321

何に使うかは微妙ですがいろいろできそうです。

以上。

参考URL

Linuxカテゴリの最新記事