cat

ファイルを連結します。ファイルの中身を表示するのによく使用します。 ヒアドキュメントなど、複数行にわたるファイルを作成するのに利用します。

NAME
     cat -- concatenate and print files

SYNOPSIS
     cat [-benstuv] [file ...]

github

  • githubのjupyter notebook形式のファイルはこちら

google colaboratory

  • google colaboratory で実行する場合はこちら

環境

筆者のOSはmacOSです。LinuxやUnixのコマンドとはオプションが異なります。

実際に動かす際は先頭の!や先頭行の%%bashは無視してください。

!sw_vers
ProductName:	Mac OS X
ProductVersion:	10.14.6
BuildVersion:	18G95
!bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.

使用例

ファイルの表示、連結

cat file
cat file1 file2
cat file1 file2 > file3

ファイルを作成し、その中身を表示します。

%%bash
echo "a b c" > temp.txt
cat temp.txt
a b c

ファイルを二つ作成し連結します。

%%bash
echo "e f g" > temp1.txt
echo "h i j" > temp2.txt
cat temp1.txt temp2.txt > temp3.txt

temp3.txtが作成され、その中でtemp1.txtとtemp2.txtが連結されていることがわかります。

%%bash
cat temp3.txt
e f g
h i j

ヒアドキュメントの作成

スクリプトの中で複数行にわたるファイルを作成する際によく利用します。 EOFの表記は何でも良いです。ファイルを作成する際にはリダイレクトさせます。

%%bash

cat << EOF > temp10.txt
a b c
e f g
h i j
EOF
cat temp10.txt
a b c
e f g
h i j

ただ、これだとコマンドをそのままを入れ込むことが出来ません。コマンドの結果や、変数などが展開されて表記されます。

%%bash

cat << EOF > temp11.sh
#!/bin/bash

user="test"

echo ${user}

EOF

ここであえて変数を展開させたくない場合や、コマンドそのものの表記を残したい場合は、EOFをシングルクオテーションマークで囲みます。

%%bash
cat << 'EOF' > temp12.sh
#!/bin/bash

user="test"

echo ${user}

EOF

cat temp12.sh
#!/bin/bash

user="test"

echo ${user}

となり、ちゃんとファイルの中に${user}が展開されずにファイルの中に記載されていることがわかります。

代表的なオプション

  • t : タブを明示的に表示します(^Iと表示されます)
  • e : 改行コードを明示的に表示します($と表示されます)
%%bash
echo -e "a\tb\tc" > temp2.txt
cat -t temp2.txt
a^Ib^Ic
%%bash
echo -e "a\tb\tc" > temp3.txt
cat -e temp3.txt
a	b	c$