sedの続き
nkfとsedのところ(id:tamago_girai:20061219#p4)にコメントをいただいた。自分の使っているsedはwindows用のバイナリで
という古いやつを使っていたので-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を使っておくことにした。