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$