(08.07.17)
テキストファイルの行頭に行番号を付加して印字したいことがよくあるので、そういうスクリプトを作るんだけど、こういうスクリプトは古くはawkでやっつけたものだが、今どきはRubyなんだけど、時時行番号のフォーマットを変えたいことが起こるので、実際起こったので、以前殆どやっつけで書いた行番号付加のスクリプトに手を加えることにした。
単純なスクリプトだけど重宝するし、重宝しそうな予感。
使い方はこんな感じ。
$ linenumber.rb [-f <書式文字列>] [-s <開始行番号>] [filename...]
プログラムはこんな感じ。
#! /usr/bin/env ruby # # linenumber.rb formstr = "" startnum = ""
while ARGV.size > 0 and ARGV[0] =~ /^-/ do
case ARGV[0]
when "-f" then
if ARGV.size > 1 then
formstr = ARGV[1].sub(/~/, "%")
ARGV.shift
end
when "-s" then
if ARGV.size > 1 then
startnum = ARGV[1]
ARGV.shift
end
else
printf "unknown option -- %s\n", ARGV[0]
exit 1
end
ARGV.shift
end
if formstr == "" then formstr = "%6d: " end if startnum == "" then startnum = "1" end
n = startnum.to_i - 1
while(gets) do
n += 1
printf("%s%s", sprintf(formstr, n), $_)
end
説明
- linenumber.rb -f "(~6d)" filename... みたいな感じで使う。
- オプション-fで行番号の書式文字列を与えているわけだが、これはsprintfの書式文字列そのもの。
- ただし、Windowsのバッチでは"%"がバッチ変数と解釈されてしまうので、代わりに"~"を使うことにして逃げた。
- オプション-sは開始番号を与える。遊び半分でつけた。
- このスクリプトと、EmacsやXyzzyやviやed(笑)みたいにバッファの内容を外部コマンドに引き渡せるエディタと組合わせて使うとすごく気持がいい。
- EmacsやXyzzyなら自力で実現できるわけだけど、外部コマンドとしても使えるのがよいよね。
ここを参照しているページ
#related: relatedプラグインは廃止されました。