Movatterモバイル変換


[0]ホーム

URL:


hydroculのメモ >コマンドの使い方(Linux) >cat コマンド

cat コマンド2015/10/11

ファイルまたは標準入力の内容をそのまま標準出力に出力するコマンド。ファイルの中身を確認するのによく使う。または、複数のファイルを指定することで、複数のファイルを連結するのに使う。

catの反対はtac(冗談ではなく、ほんとうにこういうコマンドがある)。

入力の全部ではなく先頭の部分のみを出力したい場合はheadコマンドを、最後の部分のみを出力したい場合はtailコマンドを使う。

入力の全部をターミナル上でスクロールしながら見るにはlessコマンドを使う。

インストール2016/03/17

Coreutilsというパッケージに入っているので、CentOSにもUbuntuにも始めから入っている。

オプション2016/05/10

-A
-vET と同じで、行末、タブ、CRを可視化する。
-b
行番号を付加して出力する。-n と似ているが-b は空行には行番号を付けない。
-E
各行末に$ を追加して出力する。
--help
ヘルプ表示
-n
行番号を付加して出力する。(less でこれに相当するのは-N)
-s
連続する空行を1つにまとめる。-n と併用した場合は結果として行番号がずれる。
-T
タブを^I として出力する。
-v
CR (0x0D) を^M として出力する。
--version
バージョン表示

-- というパラメータを渡すとそれ以降のパラメータをオプションではなくファイル名とみなしてくれるので、- で始まるファイル名を扱いたい場合に使うとよい。

スポンサーリンク

長いテキストファイルを見るには2015/10/11

cat だとターミナル上を一瞬で流れてしまうので、最後の1画面分以外は見ることができない。

ターミナルとしてWindowsのTera Termなどを使っていれば、ターミナルのスクロールバーで上のほうを確認できるかもしれない。

または、tmuxなどを使っていれば、tmuxのコマンドでスクロールさせ、上のほうを確認できるかもしれない。

ただ大抵はlessコマンドを使うのが楽である。オススメはless に オプション-XF を付けること。

$ less -XF foo.txt

-Xlessを終了した後も最後に表示していた部分をターミナル上に残す。これがないとターミナルをクリアしてしまう。

-F はファイルが短くて1画面に収まる場合はcat と同じ挙動、つまり画面に表示した後、直ちにコマンドを終了する。

cat を使ったファイルの作成と bash, zsh での機能2015/10/06

シェルからcat を使ってファイルを作成するには、以下のような方法がある。

$ cat > foo.txthogehoge# ここで Ctrl+D を押せば、標準入力が閉じられて、# 入力した内容がファイルに書きだされる。

ただ、これは zsh ではcat を使わなくても以下のようにできる。

$ > foo.txthogehoge# ここで Ctrl+D を押せば、標準入力が閉じられて、# 入力した内容がファイルに書きだされる。

bash ではこの方法だと標準入力を端末で入力させてもらえずに、空っぽのファイルが書きだされる。ファイルが既存だった場合は、内容が削除され、強制的に空っぽのファイルになってしまう。

bash での動きはtouch に似ているが、touch は、ファイルが既存だった場合は、内容を削除せずにタイムスタンプだけ新しくする。

複数のファイルを連結するには2016/02/24

$ cat foo.txt bar.txt baz.txt > output.txt

とすると、3つのファイルを連結してoutput.txt というファイルを生成する。

標準入力とファイルを組み合わせて連結するには、標準入力の位置に- を置く。

$ cat foo.txt - baz.txt > output.txt

とすると、foo.txt の後ろに標準入力の内容、その後にbaz.txt の中身を連結して、output.txt を生成する。

ディレクトリの中にあるすべてのファイルをまとめて閲覧するには2013/10/08

ディレクトリの中にサブディレクトリが存在しない場合

ls foo/* | awk '{print "echo " $1 "; cat -n " $1}' | sh | less

->たくさんのファイルをまとめて less で閲覧するには

cat の使いみち2015/10/06

行数が膨大なテキストファイルに対してなにかの処理をしたい。

処理に時間がかかってしまうが、その “なにか” を処理させるワンライナーが正しいかどうか不安で何度か試行錯誤する必要がある場合に、試行錯誤中は、テキストファイル全体を処理するのではなく、headでファイルの一部だけを処理してみる。

ワンライナーが完成したときに、コマンド履歴のheadcat に書き換えるだけで処理を完成させることができる。

“なにか” が仮に文字コード変換だとすると、こんな感じ。

## テキストファイルの文字コードがわからないが、とにかくUTF-8にしたい$ head huge.txt | nkf --guessCP932 (CRLF)## CP932 というのをUTF-8にするにはどうしたらいいんだっけ?$ head huge.txt | nkf -sW...## 違った、文字化けしちまった、こっちかな?$ head huge.txt | nkf -Sw...## 合ってた。さて、改行コードはどうなってる?$ head huge.txt | nkf -Sw | nkf --guessUTF-8 (CRLF)## 改行コードも直したい$ head huge.txt | nkf -Sw -Lu | nkf --guessUTF-8 (LF)## OK。じゃあ、本番$ cat huge.txt | nkf -Sw -Lu > result.txt

最後の本番のコマンドはnkf -Sw -Lu huge.txt > result.txt でもよいのだが、直前のコマンド履歴のheadcat に書き換えるだけのほうが、タイピングが楽で間違えないのである。このときcat はほとんど意味のある仕事をしないが、タイピングを楽にすることに意味がある。

連続する空行を1行にまとめるには2016/02/05

-sオプションで簡単にできる。

$ cat foo.txtabcdef$ cat -s foo.txtabcdef

行番号を表示するには

->テキストファイルに行番号を付けるには

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク

[8]ページ先頭

©2009-2025 Movatter.jp