perl -p -i.bak -e "!a!A!g" *
をコマンドラインで実行すると
ファイルをオープンできないとのエラーが出ます。
ちなみに
perl -p -i.bak -e "!a!A!g" x.txt
ならばOKです。
ディレクトリ内のすべてのフィルに適用したいのですがどうしたらいいでしょうか?
WindowsXP に最新版のPerlを入れて実行しています。
回答(3件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
No.3ベストアンサー20pt
perl -i.bak -p -e "BEGIN{@ARGV=split('\0',`perlglob @ARGV`)}s/a/A/g" *
のようにしてみて下さい。
たびたびこういうことが必要なら、バッチとPerl を使って簡略化すればいいと思います。
この回答へのお礼
ありがとうございます。
そうします。
No.2ベストアンサー10pt
UNIX ならシェルが展開するんだけど DOS とか Windows だと自分で展開しなきゃならない. なので, ちょっと意味が変わるけどこれが一番近いかな?
for /F "delims=: tokens=*" %f in ('dir /B /A-D') do @perl -p -i.bak -e "!a!A!g" "%f"
UNIX に翻訳すると
for f in `dir *`; do perl -p -i.bak "!a!A!g" "$f"; done
のような感じ.
この回答へのお礼
ありがとうございます。
とにかく簡単にはできないことがわかりました。
マイクロソフト系のOSはワイルドカード展開をアプリケーション側で行うからです。
Perl に対して "*" というファイル名がそのまま渡ってしまうため、それをオープンできずにエラーになってしまうのです。
Unix 系のOSは、ほとんどのケースではシェル側で展開するんですよね。たしか。
この回答へのお礼
ありがとうございます。
何か対処方法はないでしょうか?
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示











