新しく質問する

perl -p -i.bak -e "!a!A!g" *

役に立った:0件
  • 質問者:reiman
  • 投稿日時:2006/04/20 10:24
  • 困り度:暇なときに回答をください
  • 友達に紹介
  • ブログに書く
  • 教えて!gooお気に入り

をコマンドラインで実行すると
ファイルをオープンできないとのエラーが出ます。
ちなみに
perl -p -i.bak -e "!a!A!g" x.txt
ならばOKです。
ディレクトリ内のすべてのフィルに適用したいのですがどうしたらいいでしょうか?

WindowsXP に最新版のPerlを入れて実行しています。

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:0件)
  • 参考になった:0件

No.3ベストアンサー20pt

  • 回答者:BLUEPIXY
  • 回答日時:2006/04/20 16:18

perl -i.bak -p -e "BEGIN{@ARGV=split('\0',`perlglob @ARGV`)}s/a/A/g" *
のようにしてみて下さい。
たびたびこういうことが必要なら、バッチとPerl を使って簡略化すればいいと思います。

通報する

この回答へのお礼

ありがとうございます。
そうします。

  • 参考になった:0件

No.2ベストアンサー10pt

  • 回答者:Tacosan
  • 回答日時:2006/04/20 13:06

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
のような感じ.

通報する

この回答へのお礼

ありがとうございます。
とにかく簡単にはできないことがわかりました。

  • 参考になった:0件

 マイクロソフト系のOSはワイルドカード展開をアプリケーション側で行うからです。

 Perl に対して "*" というファイル名がそのまま渡ってしまうため、それをオープンできずにエラーになってしまうのです。
 Unix 系のOSは、ほとんどのケースではシェル側で展開するんですよね。たしか。

通報する

この回答へのお礼

ありがとうございます。
何か対処方法はないでしょうか?

  
このQ&Aは役に立ちましたか?(役に立った:0件)

このページのトップへ

Facebook公式ページ

公式Twitter