Linuxコマンド辞典 catコマンド(テキスト処理)

ファイルの内容を標準出力に出力するcatコマンドの概要や基本的な使用方法、オプション等を記載。また、複数ファイルを連結、長いテキストを1ページに収める方法、行番号の表示、空白行の削除、ヒアドキュメントの出力、特定の文字列の検索などの方法も記載しています。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

参考サイト:Man page of INSTALL

概要・使用方法

単純にテキストファイルの内容を見る場合は、「cat」コマンドを使用します。「cat」コマンドは、指定したファイルを標準出力に出力します。

ファイル名の代わりに「-」が指定された場合は、catへの入力に標準入力が使われます。複数のファイルを指定すると指定した順に標準出力に出力します。他のコマンドと組み合わせて使用することが多く、リダイレクト「>」と組み合わせて使用すると、複数のファイルを指定し連結した1つのファイルを出力します。「|(パイプ)」を使って他のコマンド連結して、catで開いたテキストファイル内を検索したり、1ページに収まらない長いテキストを、ページャーのように表示したりできます。

書式

$cat [オプション] [ファイル名・・・]

catのコマンド名は「concatenate(連鎖/連結)」由来になっています。

オプション

-n
–number
行番号をつけて表示する
-b
–number-nonblank
空行以外に行番号をつける
-E
–show-ends
行末に「$」をつける
-s
–squeeze-blank
連続した空行を1行の空行にする
-n
–number
行頭に行番号をつける
-T
–show-tabs
タブを「^」にして表示する

テキストファイルの内容を表示する

最も基本的な使用方法です。

# cat ファイル名

実行結果

[sunarin@localhost work]$ cat /usr/share/doc/zip-3.0/LICENSE 
This is version 2007-Mar-4 of the Info-ZIP license.
The definitive version of this document should be available at
ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely and
a copy at http://www.info-zip.org/pub/infozip/license.html.


Copyright (c) 1990-2007 Info-ZIP.  All rights reserved.

For the purposes of this copyright and license, "Info-ZIP" is defined as
the following set of individuals:

   Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois,
   Jean-loup Gailly, Hunter Goatley, Ed Gordon, Ian Gorman, Chris Herborth,
・
・
・

複数ファイルをつなげて表示する。

catコマンドの引数にスペース区切りで複数のファイルを指定した場合、順番に表示します。

# cat ファイル名 ファイル名・・・

実行結果

[sunarin@localhost work]$ cat sample1.txt sample2.txt 
abc
def
[sunarin@localhost work]$ 

1ページに収まらないような長いテキストを表示する

moreコマンドを使用しなかった場合、長いテキストは流れるように最終行まで出力され確認ができません。そこで、catコマンドに|(パイプ)でmoreコマンドを指定することで、1画面に収まるように表示してくれます。次のページへ行く場合は「Enter」キーで進めていきます。

#  cat ファイル名 | more

実行結果

#       $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
・
・
・
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
--続ける--

行番号を先頭に表示させてテキストファイルの内容を表示する

コマンドに「-n」のオプションを付けて実行します。

#  cat -n ファイル名

実行結果

[sunarin@localhost work]$ cat -n /usr/share/doc/zip-3.0/LICENSE 
     1  This is version 2007-Mar-4 of the Info-ZIP license.
     2  The definitive version of this document should be available at
     3  ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely and
     4  a copy at http://www.info-zip.org/pub/infozip/license.html.
     5 
     6 
     7  Copyright (c) 1990-2007 Info-ZIP.  All rights reserved.
     8 
     9  For the purposes of this copyright and license, "Info-ZIP" is defined as
    10  the following set of individuals:
・
・
・

連続した空白行を1行にまとめて表示する

テキストファイル内に空白行が連続している場合、長い行の場合はスクロールして見づらいため、そのようなときは、コマンドに「-s」のオプションを付けて実行することで、空白行を1行にまとめて表示してくれます。

#  cat -s ファイル名

実行結果

cat -s 表示例

空白行を一括して削除する

catコマンドとtrコマンドをパイプでつなげて実行することで、空白行を一括して削除できます。

※trコマンドにおいて’\n’は改行を意味します。

#  cat ファイル名 | tr -s '\n'

実行結果

cat+trコマンド実行結果

空白行を除き行番号を付加して表示する

空白行を除いて行番号を付けたい場合は、「-b」オプションを使用します。

#  cat -b ファイル名

実行結果

 cat -b実行結果

複数のファイルを1つに結合する

結合するファイルをスペースで区切りながら出力のリダイレクトを使用して結合します。

#  cat ファイル名 ファイル名・・・>出力ファイル名

実行結果

[sunarin@localhost work]$ cat sample1.txt sample2.txt > sample12.txt
[sunarin@localhost work]$ cat sample12.txt 
abc
def
[sunarin@localhost work]$ 

ファイルから特定の文字列を含む行を検索

パイプ(|)でgrepコマンドにテキストファイルの内容を渡すことで、テキストファイルの内容を検索することができます。

#  cat ファイル名 |grep パターン

実行結果

[sunarin@localhost work]$ cat -n sample.txt 
     1  abcd
     2 
     3 
     4 
     5 
     6 
     7 
     8 
     9  efgh
    10 
    11 
    12 
    13 
    14 
    15 
    16  ijkl
[sunarin@localhost work]$ cat -n sample.txt |grep 'fg'
     9  efgh
[sunarin@localhost work]$ 

ファイル内容の先頭任意の行数だけを表示する

headコマンドをパイプ(|)でつなげて実行することで、先頭の任意の行数だけ表示することができます。catコマンドに「-n」を付けることで、行番号を表示することができます。

#  cat -n ファイル名 |head -n 10

実行結果

[sunarin@localhost work]$ cat -n sample.txt 
     1  abcd
     2 
     3 
     4 
     5 
     6 
     7 
     8 
     9  efgh
    10 
    11 
    12 
    13 
    14 
    15 
    16  ijkl
[sunarin@localhost work]$ cat -n sample.txt |head -n 10
     1  abcd
     2 
     3 
     4 
     5 
     6 
     7 
     8 
     9  efgh
    10 
[sunarin@localhost work]$ 

catの第1引数の「-」に使われる例

zcatを使ってgzipで圧縮されたファイルを展開して、別のファイルをcatで開いて結合して別ファイルに出力しています。

#  zcat ファイル名.gz | cat - ファイル名 > 出力するファイル名

実行結果

[sunarin@localhost work]$ zcat ./hostlist1.txt.gz | cat - hostlist2.txt >./hostalllist.txt
[sunarin@localhost work]$ cat hostalllist.txt 
hosta 192.168.0.10
hostb 192.168.0.11
hostc 192.168.0.12

hoste 192.168.0.30
hostf 192.168.0.31
[sunarin@localhost work]$ 

ヒアドキュメントを使ってファイルに文字を書き込む

# cat - << EOF > 出力するファイル名

実行結果

[sunarin@localhost work]$ cat - << EOF > ./doc.txt
> bom bom quest
> ban ban quest
> EOF
[sunarin@localhost work]$ cat ./doc.txt 
bom bom quest
ban ban quest
[sunarin@localhost work]$ 

テキストファイルとテキストファイルの間に標準入力した文字を挿入する。

catで表示した2つのテキストファイルの間に任意の文字列を埋め込んで表示させます。

# echo "任意のテキスト(文字列)" | cat ファイル名 - ファイル名

実行結果

[sunarin@localhost work]$ cat hostlist1.txt hostlist2.txt 


hostA 192.168.0.10
hostB 192.168.0.11

hostD 192.168.0.30
hostE 192.168.0.31
[sunarin@localhost work]$ echo "hostC 192.168.0.20" | cat hostlist1.txt - hostlist2.txt 


hostA 192.168.0.10
hostB 192.168.0.11

hostC 192.168.0.20
hostD 192.168.0.30
hostE 192.168.0.31
[sunarin@localhost work]$