sedの続き

nkfsedのところ(id:tamago_girai:20061219#p4)にコメントをいただいた。自分の使っているsedwindows用のバイナリで

という古いやつを使っていたので-iオプション自体が無かった。それは何なので、

からwindows用に移植された新しいsedを入手して試してみたものの、拡張子(でなくても良いが)を指定しないとダメらしい。何も指定しないと本来ならば元のファイルに置き換えた結果を上書きするのだが、エラーが出て実行できない。

C:sed-mbcs-win32-20051220  % type test.sed
s/です。/ですます。/g;
C:sed-mbcs-win32-20051220  % mbsed.exe --in-place= -f test.sed readme.ja
mbsed.exe: cannot rename ./sedDOSSUX: File exists
C:sed-mbcs-win32-20051220  % mbsed.exe --in-place=.back -f test.sed readme.ja   # うまくいく
C:sed-mbcs-win32-20051220  % mbsed.exe -i -f test.sed readme.ja
mbsed.exe: cannot rename ./sedDOSSUX: File exists
C:sed-mbcs-win32-20051220  % mbsed.exe -i.back2 -f test.sed readme.ja           # 同じくうまくいく
C:sed-mbcs-win32-20051220  % dir /b
BUGS
COPYING
mbc-diff
mbsed.exe
readme.ja
readme.ja.back          # --in-place=.backの結果できたファイル
readme.ja.back2         #         -i.back2の結果できたファイル
sed.info
test.sed

windows上のActive Perlでも同様にファイルを上書きすることはできない。

C:sed-mbcs-win32-20051220  % perl -pi -e "s/sed/awk/g;" readme.ja
Can't do inplace edit without backup.   # ダメです
C:sed-mbcs-win32-20051220  % perl -v

This is perl, v5.8.8 built for MSWin32-x86-multi-thread
(with 25 registered patches, see perl -V for more detail)

Copyright 1987-2006, Larry Wall

Binary build 817 [257965] provided by ActiveState http://www.ActiveState.com
Built Mar 20 2006 17:54:25

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

nkfの場合にはwindowsバイナリでもファイルの文字コードを変更して元のファイルに上書きするオプションがある。

nkf.exe -Lw -s --overwrite hoge.txt     # hoge.txtの文字コードはsjisでcrlfになる

とりあえず今のようにmvを使っておくことにした。