• ベストアンサー

ファイル中の記述文字の一括置き換えについて

perlにてsed相当の処理を行いたいのですが ご存知の方、教えてください。 [処理内容] ・外部入力より変数定義・・・$A、$B ・ファイル「AA.txt」中記述の「$A」を「$B」に一括変更する。 単純にsystem関数でsedを使用すれば済むようでもありますが system("sed -e 's/'$A'/'$B'/g' $AA.txt > AA.tmp"); と記述すると失敗してしまいます(構文エラーではありません)。 単純に記述ミスでしょうか? 他に上記のよな処理を実現できるコマンド等ございましたら、 ぜひご教授ください。 サーバー・・・HP-UX 開発言語・・・Perl5 開発端末・・・windows2000(Tera Term 使用) 以上、よろしくお願いいたします。

  • Perl
  • 回答数4
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>代わるような処理の記述はないでしょうか?? Perl中なら、単にs/\$A/\$B/gでいいし、 それがお好みならsystemでPerlを呼び出すこともできると思います。 その場合は、PerlのパスとAA.txtのパスが問題かも・ フルパスにしないといけないかもしれません

kal1119
質問者

お礼

> その場合は、PerlのパスとAA.txtのパスが問題かも・ フルパスにしないといけないかもしれません その通りでございました。。。 定義ファイルのパスが問題のようで・・・ 失敗なく処理が完了いたしました。 ありがとうございます。 kochoryさんもご協力ありがとうございました。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>コマンドライン上からの実行ということでしょうか? そうです。 "は'の方がいいかも

kal1119
質問者

補足

ごめんなさい、私の説明がいたらなかったようで・・・ perlプログラム中の system("sed -e s/$A/$B/g $AA_txt > $AA_tmp"); に代わるような処理の記述はないでしょうか?? 以上、よろしくお願いいたします。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>perl -i.bak -pe "s/\$A/\$B/g;" AA.txt

kal1119
質問者

お礼

ご回答ありがとうございます。 すみません上記はコマンドライン上からの実行ということでしょうか? よろしくお願いいたします。

  • kochory
  • ベストアンサー率45% (167/370)
回答No.1

質問文中のコマンドの中の、$AA.txtは、AA.txtの間違いですよね。 それが原因では? それを直せば手元のPCではちゃんと動作しましたし、 単に system("sed -e s/$A/$B/g AA.txt > AA.tmp"); でもOKです。

kal1119
質問者

お礼

ご回答ありがとうございます。 すみません、少しごっちゃになってしまいました。 正確にはファイル名も変数であたえております。 正しくは、 $AA_txt = "AA.txt"; $AA_tmp = "AA.tmp"; system("sed -e s/$A/$B/g $AA_txt > $AA_tmp"); でした。。。 ちなみに上記「system」の前に「$flag = 」をつけて print "$flag\n"; としてみましたが、私の方では結果0以外(512)で失敗でした。

関連するQ&A

  • 条件にあった特定のファイルのフォルダ名を得る

    よろしくお願いします。 階層的に存在するファイル(すべて同名)で、条件にあった記述がされているファイルのフォルダ名を得たいのですが、どのような方法が考えられるでしょうか? 漠然とした質問で申し訳ありません。 例えば、 TEST--+--A--TEST.txt      |      +--B--TEST.txt      |      +--C--TEST.txt というフォルダ階層でフォルダ"/TEST/A~/TEST/C"があり、それぞれ"TEST.txt"というファイルを持っているとします。 その中の"/TEST/B/TEST.txt"だけ"dummy"という記述が1行あったとするとき、フォルダ名"/TEST/B"を抽出したいのですが何か良い方法はあるでしょうか? (実際の各フォルダ名は規則性なくかなりの量があります) サーバー・・・HP-UX CGI開発言語・・・Perl5 開発端末・・・windows2000(Tera Term 使用) 以上、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • Perlでリモートコピー

    こんにちは、よろしくお願いします。 Perlでファイルをリモートコピーしたいのですが、、、 UNIXの「rcp」を使用してみたのですがエラーとなってしまいました。 $cmd = '/bin/rcp'; system("${cmd} -p test.txt server1:/home/data/"); Tera Term上でプログラムしているのですが、ターム上ではエラーなく正常にコピー処理が行えます。 実行ユーザーも同じです。 # rcp -p test.txt server1:/home/data/ 何かよい方法、もしくは上記解決策等ありますでしょうか? サーバー・・・HP-UX CGI開発言語・・・Perl5 開発端末・・・windows2000(Tera Term 使用) 以上、ご教授の程よろしくお願いいたします。

  • sedコマンドに関して

    サーバーにあるファイルの中身を置換する為 Tera Termのsedコマンドを使おうとしたのですが 文字列の「'」が置換できません。 以下のように入力してみましたがだめでした。 sed -e 's/'/'aa/g' text1.txt > text2.txt sed -e 's/\'/\'aa/g' text1.txt > text2.txt 出来ないんでしょうか!? 宜しくお願いいたします。

  • フォルダの移動をおこないたいのですが・・・

    よろしくお願いします。 CGIの中間プログラムとして、 「カレントフォルダを移動して特定のフォルダを削除する」 というようなPGMを作っているのですが、フォルダ移動の処理がうまくいきません。 ----------------------------- use Cwd; $tmpdir="tmp"; if(-d $tmpdir)){  if(chdir("$tmpdir"){   print"成功\n";  }  else{   print"失敗\n";  } } ----------------------------- 上記記述の結果は失敗となります(実際のPGMより簡略化しております)。 「tmp」フォルダは存在するが 移動に失敗しているということです。 私の記述方法が間違っているのでしょうか? サーバー・・・HP-UX 開発言語・・・Perl5 開発端末・・・windows2000(Tera Term 使用) 以上、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • セレクトメニューの項目をファイルから

    よろしくお願いいします。 セレクトメニューの項目を別に作成しているテキストファイルから読み込みことは可能でしょうか? aaa.txt 北海道,青森県,岩手県,宮城県,・・・ aaa.html-セレクトメニュー  |北海道|  |青森県|  |岩手県|  |宮城県|  | ・   |  | ・   |  | ・   | webサーバー・・・HP-UX web・・・IE CGI開発言語・・・Perl 開発端末・・・windows2000(Tera Term 使用) 以上、よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • print文で「

    いつもお世話になっております。 早速ではありますが、 タイトル通り、print文で「""(ダブルクォーテーション)」を出力させたいです。 例えば、 open(OUT, ">>TEST.txt"); print OUT "123:456:789\n"; close(OUT); とある時、「456」だけに「""(ダブルクォーテーション)」をつけて「"456"」として出力・・・、 つまり、TEST.txt の最後の行に、 123:"456":789 と出力させるにはどうしたらよいでしょうか。 サーバー・・・HP-UX CGI開発言語・・・Perl5 開発端末・・・windows2000(Tera Term 使用) 以上、ご教授の程よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 処理終了後にフレームの更新

    現状1ページを「FRAMESET」にて上下2分割しているのですが、CGI終了後上段のフレーム部のみ更新したいです(index.html)。 [処理概要] 上段処理(UP.cgi) ・AA.txtから読み込んだ値をセレクトメニューに反映(cgiにて自動処理) ・セレクトメニューから値(1)を選択(ブラウザより手動) ・テキストボックスに値(2)を入力(ブラウザより手動) ・実行ボタンを押す(LOW.cgiへ) 下段処理(LOW.cgi) ・上段で選択された値(1)を値(2)に変更してAA.txtに反映 ・変更内容を下段部に表示 というような処理に ※LOW.cgi実行後、上段部を更新(UP.cgi実行) というようなことを盛り込みたいです。 そうすることによってLOW.cgiの処理ごに上段セレクトメニューは変更された結果が読み込まれるという寸法です。 (このような説明で理解いただけるでしょうか?) プログラム自体はCGI/Perlですが、 処理内容的にはHTMLかと思いこちらに質問させていただきました。 詳しい方いらっしゃいましたら、ご教授ください。 サーバー・・・HP-UX 開発言語・・・Perl5 開発端末・・・windows2000(Tera Term 使用) 以上、よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • tera termについて

    現在複数のシステムの運用(おもにAIX)を行っているものです。 数十個(2~30くらい?)のシステムの運用を行っているのですが、 ホスト名とIPアドレスを一致させて覚えることが出来ず苦労しています。 そこで、ひとつのホストにひとつのtera termを割り当てることが出来るのでしょうか? ホストA専用のtera termにはA.A.A.A ホストB専用のtera termにはB.B.B.B ホストC専用のtera termにはC.C.C.C というような感じで、各ホストごとのショートカットなどを クリックするだけで各ホストにログインする画面が表示されるように することは可能ですか? 分かりにくくて申し訳ありません・・・ IPアドレスを登録してtera term起動時に選択する方法は知っているのですが・・・

  • クライアントの環境変数値を得る。

    よろしくお願いします。 web上からCGIを実行したときに そのCGIを実行したクライアントの環境変数値を得ることは可能でしょうか? システム環境変数の「HOME」や「TEMP」の指定先を得たいのですが。 クライアント端末はWindows2000 or XP です。 webサーバー・・・HP-UX web・・・IE CGI開発言語・・・Perl もしくは csh 開発端末・・・windows2000(Tera Term 使用)

    • ベストアンサー
    • CGI
  • CSVファイルのダウンロード

    よろしくお願いします。 現在、ボタンを押すと(=CGI実行)フィルターによりCSVファイルが作成されるという様なものを開発しております。 しかし、その出来上がったCSVファイルをそのままダウンロードしたいと言う要望がありまして、そのCGIに組み込めないものかといろいろ調べております。 概要 (1)ボタンを押す(=CGI実行) (2)フィルターによりCSVファイル作成 (3)作成されたファイルをダウンロード という具合で、教えていただきたいのは(3)です((1)(2)は作成済み)。 実際にはCSVファイルは3つできるのですが、これらをまとめてダウンロード・・・というのはムリですよねぇ(第1希望)。 ムリなら、処理の中で圧縮させます(これぐらいはできます)ので、そのファイルをダウンロードさせるというやり方でも構いません(第2希望)。 実現が難しいようであれば実行結果画面に<a href= ~>で貼り付けます。 webサーバー・・・HP-UX web・・・IE CGI開発言語・・・Perl 開発端末・・・windows2000(Tera Term 使用) 以上、情報等お持ちの方いらっしゃいましたら、 よろしくお願いいたします。

    • ベストアンサー
    • CGI

専門家に質問してみよう