9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ファイルの逆順出力

Last updated at Posted at 2013-03-15

ファイルを逆順に出力したい事がたまにあると思います。
FreeBSD の tail(1) には -r オプションがあってファイルを行単位で逆順に出力できますが、これは POSIX.2 にはない拡張仕様なので汎用的ではありません。
Linux では tac(1) (多分逆順に出力する cat だから tac) というコマンドがインストールされている事もありますが、これも POSIX.2 には存在せず Linux でも標準ではインストールされていない場合があります。
ファイルの逆順を出力するなら、ここでも ex(1) を利用するのが簡単です。

#!/bin/sh

/bin/ex -s ${1} <<-EOF
	g/^/mo0
	%p
EOF

この様なスクリプトで汎用的なファイル逆順出力ができます。

このスクリプトは ex(1) を利用して「行の先頭 (^) を 0 行目に移動(mo0)して、 全行を表示する(%p)」というコマンドを実行しています。
行の先頭は全ての行に存在するので全ての行が処理対象になります。 各行を順番に 0 行目(1 行目の前の行なので先頭行)に移動するので、結果としてファイルの内容が逆順に表示される事になります。

ね? ex(1) ってやっぱり便利でしょう?

9
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?