tac コマンド

catの反対。入力の行で逆順にして出力する。つまり一番下の行が一番上に来る。

以下のような foo.txt というファイルがあったら、

abc
def
ghi

以下のようにコマンドを打つと、

$ tac foo.txt

以下のように出力される。

ghi
def
abc

以下のように他のコマンドとパイプでつないでもよい。

$ cat foo.txt | tac

行の順番は変えずに行の中の文字を逆順にする rev というコマンドもある。

$ ( echo しんぶんし; echo たけやぶ焼けた) | cat
しんぶんし
たけやぶ焼けた

$ ( echo しんぶんし; echo たけやぶ焼けた) | rev
しんぶんし
たけ焼ぶやけた

$ ( echo しんぶんし; echo たけやぶ焼けた) | tac
たけやぶ焼けた
しんぶんし

この例わかりづらいじゃないか。

インストール

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

オプション

--help
ヘルプ表示
-r
-s で指定する区切り文字を正規表現で解釈する
-s <STRING>
改行ではなく、指定の文字を区切り文字にする
--version
バージョン表示

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

移植性

tac はCentOSやUbuntuなど(GNU coreutils)にはあるが、MacなどのBSD系にはないらしい。 BSD系では、tac の代わりに tail -r を使う。しかし tail -r は逆にGNU coreutilsでは対応していない。

参考

HOWTO

単語を逆順に並べるには

-s というオプションで区切り文字を指定できるので、行ではなく単語を逆順に並べることもできる。

$ echo -n "I'm feeling lucky." | tac -s ' '
lucky.feeling I'm 

さらに -r というオプションを使えば正規表現で区切り文字を指定できる。

$ echo -n "I'm feeling lucky." | tac -r -s '[^a-zA-Z]'
lucky.feeling m I'
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク