tac / rev 入門 - 行や文字を逆順にする

tac / rev 入門 - 行や文字を逆順にする

この記事でできるようになること

  • `tac` で行の並び順を逆さまにできる
  • `rev` で各行の中の文字を逆さまにできる
  • `tac` と `rev` と `tail` を取りちがえずに使い分けられる

前提知識(先に読むと理解しやすい記事)

この記事でわかること

  • tac行の並び順 を逆さま(最後の行が先頭)にできる
  • rev各行の文字 を逆さま(abc → cba)にできる
  • tacrev のどっちを使う?」の 使い分け がはっきり分かる
  • ログを 新しい順 で読む、2 つを 組み合わせる など実用テクが身につきます

言葉の整理(先に取りちがえを防ぎます)

  • :ファイルの中の 1 行のことです。改行から改行までのひとかたまりを指します。
  • 行の並び順:どの行が何番目に来るか、という順番です。tac が変えるのはここだけです。
  • 行の中の文字:1 行を組み立てている文字そのものです。rev が変えるのはここだけです。
  • 標準入力:パイプ(|)で前のコマンドから流れてくるデータのことです。ファイルの代わりに使えます。

「行を逆にする」と「文字を逆にする」は別の作業です。この 2 つを分けて考えると、以降の話が一気にわかりやすくなります。

結論(先に覚える違い)

  • 行の順番 をひっくり返したい → tac("cat" の逆綴り)
  • 1 行の中の文字 をひっくり返したい → rev(reverse の略)
  • 名前も対象も「逆」。混同したら tac=行 / rev=文字 と唱える

前提(対象環境)

  • OS:Ubuntu / 一般的な Linux ディストリ
  • tac は GNU coreutils 同梱、rev は util-linux 同梱。どちらも標準でインストール済み

1. tac とは? 何ができるのか

結論: tac はファイルの行を最後から先頭へ、行単位で逆順に出力するコマンド。名前は cat を逆さに綴ったもの。

リナ: 先輩、cat でファイルを表示すると上から順に出ますよね。下から 表示したいときはどうするのですか。
ライニー先輩: そんなときは tac だよ。cat を逆からつづった名前なんだ。
ライニー先輩: やることも名前のとおりで、行を逆順に表示する。
リナ: 名前まで逆さまなんですね。
ライニー先輩: そう。まずはふつうの cat を見てみよう。
$ cat fruits.txt
apple
banana
cherry
$ tac fruits.txt
cherry
banana
apple
リナ: 行がまるごと下からひっくり返りました。文字はそのままなんですね。
ライニー先輩: そこが大事なポイント。tac が動かすのは 行の並び順 だけなんだ。
ライニー先輩: apple という単語の中身にはさわらない。だから文字はそのまま残るよ。

区切りは行(改行)が基本です。-s を使えば区切り文字を変えられます。

ただし区切り文字の付き方が直感とちがうため、初心者のうちは無理に使わなくて構いません。くわしくは man tac を読んでください。

2. なぜ「行の逆順」が役立つのか

結論: ログは古い行が上・新しい行が下に追記されるため、tac で逆順にすると最新のできごとから読める。

リナ: 行を逆にすると、何の役に立つのですか。
ライニー先輩: いちばんの出番は ログ だね。ログファイルは、新しい記録が下にどんどん足されていく。
ライニー先輩: つまり最新のできごとは、いつも一番下にあるんだ。
リナ: 最新を見たいのに、毎回ファイルの末尾までスクロールするのは大変です。
ライニー先輩: そこで tac を使う。逆順にすれば 最新の行が先頭 に来るよ。
ライニー先輩: head と組み合わせれば、直近 5 行を新しい順で読むこともできる。
$ tac access.log | head -n 5
192.168.0.9 - GET /login 200
192.168.0.4 - GET /api 500
192.168.0.4 - GET /api 500
192.168.0.7 - GET / 200
192.168.0.2 - GET /about 200

tail は末尾の行を 元の順番のまま 表示します。「末尾を新しい順に並べ直したい」ときは tac を使います。目的がちがうので使い分けてください。

3. rev とは? tac と何が違うのか

結論: rev は各行の中の文字を左右反転する。行の並び順は変えない。tac(行を逆順)とは対象がまったく違う。

リナ: tac は行を逆にする。では rev は何を逆にするのですか。
ライニー先輩: rev1 行の中の文字 を逆さまにするんだ。reverse(リバース)の略だよ。
ライニー先輩: 変えるのは行の中身だけ。行の並び順はそのままなんだ。
リナ: つまり abccba になるということですか。
ライニー先輩: そのとおり。同じファイルで見くらべてみよう。
$ rev fruits.txt
elppa
ananab
yrrehc

tac と rev の違い(ここが核心)

コマンド 逆にする対象 apple → 行の順番
tac 行の並び順 apple 変わる
rev 各行の中の文字 elppa 変わらない
リナ: 名前が逆なだけでなく、逆にする中身もちがうんですね。tac は行、rev は文字、と。
ライニー先輩: それを覚えれば完璧だよ。ちなみに rev は入っているパッケージも別なんだ。
ライニー先輩: tac は coreutils、rev は util-linux に入っている。どちらも最初から使えるけどね。

4. tac と rev を組み合わせると?

結論: tac file | rev で「行の順番」も「各行の文字」も両方逆になる。パイプでつなぐだけ。

リナ: 行も文字も、両方ひっくり返したいときはどうしますか。
ライニー先輩: パイプでつなげばいい。tac の出力をそのまま rev に流すんだ。
$ tac fruits.txt | rev
yrrehc
ananab
elppa
リナ: cherry が先頭に来ました。行が逆になっています。しかも yrrehc と、文字まで逆になっています。
ライニー先輩: そう、2 段階で効いているんだ。tac が行を逆にして、そのあと rev が文字を逆にした。
ライニー先輩: rev | tac と順番を入れかえても結果は同じだよ。2 つは別々の場所を書きかえるからね。

rev は標準入力も読めます。echo "Linux" | rev を実行すると xuniL が返ります。ファイルを用意しなくても、パイプで気軽に試せます。

5. リナの失敗:tac のつもりで rev を使う

結論: 行を逆にしたいのに rev を使うと、文字化けのように見える。原因は文字が反転しているだけ。

練習用に小さなログを作ります。

$ cat << 'EOF' > mini.log
2026-06-01 start
2026-06-02 error
2026-06-03 done
EOF
リナ: 先輩、このログを新しい順で見ようとしたら、画面がめちゃくちゃになりました。
$ rev mini.log
trats 10-60-6202
rorre 20-60-6202
enod 30-60-6202
リナ: 文字化けでしょうか。ファイルが壊れたのかと思って焦りました。
ライニー先輩: 落ち着いて。文字化けではないよ。rev を使ったから、1 行の中の文字が左右反転している だけなんだ。
リナ: えっ、これは正しい動きなんですか。
ライニー先輩: そう。よく見て。2026-06-0110-60-6202 になっている。右から読めば、もとの内容が読めるはずだよ。
リナ: 本当だ、逆から読めました。ファイルは壊れていなかったんですね。安心しました。
ライニー先輩: 行の順番を変えたいときは tac を使う。こうすれば新しい順になるよ。
$ tac mini.log
2026-06-03 done
2026-06-02 error
2026-06-01 start
リナ: これが欲しかった形です。tacrev の取りちがえには気をつけます。
ライニー先輩: いちばん多い事故だからね。対象がちがう、と覚えておけば大丈夫だよ。

どちらのコマンドも 元のファイルは変えません。画面に結果を出すだけです。だから取りちがえてもファイルは壊れません。

なお tacrev は、本サイトの仮想ターミナル入力したコマンドを解釈してコンピュータに実行させる対話プログラム。にはまだありません。この記事の例は、手元の Linux やターミナルで試してください。

6. よくある落とし穴と使い分けまとめ

結論: 行を逆順にするのが tac、行内の文字を逆順にするのが rev。混同が一番の事故。迷ったら小さなファイルで試す。

やりたいこと コマンド
行を下から上へ並べ替える tac file
ログを新しい順で先頭から読む tac log
各行の文字を左右反転する rev file
行も文字も両方逆にする tac file | rev

やってはいけない・間違えやすいこと

  • tacrev を取りちがえます。行を逆にしたいのに rev を使うと、文字化けのように見えます
  • tailtac を混同します。tail は順番そのまま、tac は逆順です
  • 大きなファイルでいきなり実行しません。まず head を付けるか、小さな例で確かめます

7. ミニ課題:実際にやってみよう

結論: 行の逆順・文字の逆順・両方の組み合わせの 3 問で、tacrev の対象のちがいを手で確かめる。

リナ: ちがいはわかりました。手を動かして確かめたいです。
ライニー先輩: いいね、3 問用意したよ。まず練習用のファイルを作ってから挑戦してみて。
$ cat << 'EOF' > animals.txt
penguin
tiger
whale
EOF

課題 1animals.txt の行を、下から順に表示しよう。

ヒント 1(方向づけ)を見る

変えたいのは行の並び順です。行の中の文字はそのままにします。

ヒント 2(コマンド名)を見る

使うのは tac です。オプションは要りません。

答えを見る
$ tac animals.txt
whale
tiger
penguin

行の順番だけが変わりました。単語のつづりはそのままです。

課題 2animals.txt の各行の文字を、左右反転して表示しよう。

ヒント 1(方向づけ)を見る

今度は行の並び順を変えません。1 行の中の文字だけを逆にします。

ヒント 2(コマンド名)を見る

使うのは rev です。

答えを見る
$ rev animals.txt
niugnep
regit
elahw

行の順番は変わりません。文字だけが逆になりました。

課題 3:行の順番も、行の中の文字も、両方逆にして表示しよう。

ヒント 1(方向づけ)を見る

2 つの作業を続けて行います。1 つ目の結果を、そのまま 2 つ目に渡します。

ヒント 2(コマンド名)を見る

使うのは tacrev の 2 つです。つなぐ記号は | です。

答えを見る
$ tac animals.txt | rev
elahw
regit
niugnep

rev animals.txt | tac と書いても同じ結果になります。

8. 振り返り

リナ: 整理します。tac が変えるのは行の並び順で、rev が変えるのは行の中の文字ですね。
ライニー先輩: そのとおり。名前が似ているぶん、対象で覚えるのが確実だよ。
リナ: ログを新しい順で読みたいときは tactail は順番そのままでしたね。
ライニー先輩: 完璧だね。どちらも元のファイルは変えないから、迷ったら小さなファイルで試すといいよ。

今日の 3 行まとめ

  1. tac は行の並び順を逆にする。行の中の文字は変えない
  2. rev は行の中の文字を逆にする。行の並び順は変えない
  3. ログを新しい順で読むなら tactail は末尾を元の順番のまま出す

次に読む

この記事を共有

次の一手