cat
の反対。入力の行で逆順にして出力する。つまり一番下の行が一番上に来る。
以下のようなfoo.txt
というファイルがあったら、
abcdefghi
以下のようにコマンドを打つと、
$ tac foo.txt
以下のように出力される。
ghidefabc
以下のように他のコマンドとパイプでつないでもよい。
$ 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では対応していない。
参考
-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'