• ベストアンサー

ディレクトリ内の複数ファイルの中から特定の文字列を置換したい

ディレクトリ内の複数ファイルの中から特定の文字列を置換したい 要は、あるフォルダ内のテキストファイルに含まれる 123を987にしたいということなんですが。 sedは使えなかったんで、 perl -p -i -e 's/123/987/' *.txt としたらできました。 しかし、 perl -p -i -e 's/$rh, $rh1/$rh2, $rh2/' *.cgi のようにスペースを含むとどうもうまくいきません。 教えてください。お願いします。

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

  • ベストアンサー
  • Ki4-U2
  • ベストアンサー率81% (364/446)
回答No.1

1.「$」はファイル内で実際に使われている文字ですか? その場合は「\」(円マークまたはバックスラッシュ)を前置(「\$」)したらうまくいきませんか? 2.「'」でなく「"」でくくってみたら、うまくいきませんか? 3.上記の両方ではいかがですか?

rabaraba
質問者

お礼

1でうまくいきました! ありがとうございます!

関連するQ&A

  • ディレクトリ内の複数のテキストファイルの文字列を、一括置換する方法について

    ディレクトリ内にある複数のcgiファイルの文字列を一括で置換する方法について教えてください。 置換前文字列 jcode.pl ↓ 置換後文字列 ../../jcode.pl 対象ファイル 以下のように、/cgiディレクトリ内に複数のcgiファイルがあります。 /web └/cgi --└ 01.cgi --└ 02.cgi --└ 03.cgi --└ 04.cgi --└ 05.cgi ただし、所有者とパーミッションを変更せずにしたいのです。 sedコマンドを試しましたが、オプションについてよくわからないため、上手く行きませんでした。 (所有者がrootに変更となったり、また、別ファイル名で保存しないと、上手く行きませんでした。) どなたか、ご指南宜しくお願い致します。

  • バッチファイルで文字列を順番問わずマッチさせたい

    バッチファイルで、2個以上の文字列を順番問わずマッチさせたいと考えています。 例えば、 「111 222 333 444 555 666 777」 という内容のテキストファイルがあったとして、 sedコマンドを使って 「222」と「444」と「666」が この順番で含まれている行を置換したい場合、 sed -e "s/.*222.*444.*666.*/置換後の文字列/" in.txt > out.txt とすれば、問題なく置換されると思います。 しかし、上記の例では、 「777 666 555 444 333 222 111」 という内容のテキストファイルは置換されません。 文字列の順番を問わず、 「222」と「444」と「666」が含まれている行ならば、 その行を置換する、といった事は出来ないでしょうか。 sedコマンド以外でも構いませんので、何かいい方法をご存知の方がおられましたらお教え頂けないでしょうか。

  • perlで特定行から特定行までを抜き出しor置換

    perlで以下のようなことをしたいと考えています。 以下のことを、コマンドラインから「perl ~」という形で 実行したいのですが、どのよにすればよいでしょうか。 1.特定行から特定行までを抜き出し 2.特定行から特定行の範囲で文字列置換 例えば、次のようなテキストファイルがあったとします。 example.txt ================================== #START aaaa hogehoge test okok perl script #END ================================== 上記ファイルを読み込んで、 1.「#START」から「#END」の間に挟まれた行だけ抜き出し 2.「#START」から「#END」の間で、「test」を置換 のです。 sedで言うところの sed -e '/#START/,/#END/ s/YYYYMM/201603/g' test.txt をやりたいのです。

    • ベストアンサー
    • Perl
  • 複数ファイルの文字列置換の方法について

    あるディレクトリ内にある全てのテキストファイルの中から、「A」という文字列を「B」に置換したいのですが、秀丸もしくはPerlなどで簡単にできますでしょうか? ご存知の方、教えて下さい。 宜しくお願いします。

  • ファイルの内の文字列の置換について

    質問なんですが、sedコマンドを使用して文字の置換をやってみたんですが、同じファイルに置換した情報を上書きすることは可能でしょうか? 今試した例としては sed -e 's/aaa/bbb/g' test > test と試してみたんですがファイルの内容がなくなってしまっていました。 同じファイルに置換内容を入れることは可能なのでしょうか? 他の方法がある場合は教えてください。 よろしくお願いします。

  • 複数行に渡る文字列の置換

    Perlで書かれたソースを以下のように書き換えたいと考えています。 【変換前】 my $message = Convert( From => 'Shift_JIS', To => 'utf-8', Text => "(UTF-8の文字列)", ); 【変換後】 my $message = Convert( "(UTF-8の文字列)" ); ソース・ファイルは非常にたくさんあるのでスクリプトを組んで一括で行いたいと考えています。 容易く書き換えを完了できる方法はないでしょうか? ■前提条件 - 別の場所に出力するようにする場合はディレクトリ階層も維持する。 - インデントされている場合はインデントを保持する。 perl -pi -e 's///'で置換することが最も簡単そうですが、今回は複数行に渡るため、 s///の部分が非常に複雑になりそうです。なので、s///の部分をスクリプト・ファイルかなにかに 置き換えて、下記のように実行できればと考えているのですが、(何かしらのオプション)の部分が よくわかりません。。 perl -i (何かしらのオプション) (ファイル名) (ソースファイル名)... もちろんもっと良い方法があれば、その方法が良いです。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • サブディレクトリ内のすべてのファイルの文字の置換

    コマンドラインから、サブディレクトリ内のすべてのファイルの文字を置換する方法を教えてください。 for x in *.*; \ do \ sed -e 's/original_pattern/replaced_pattern/g' $x > ${x}_tmp ; \ mv -f ${x}_tmp $x ; \ done とすることにより、ひとつのディレクトリ内であれば、文字列を変換できました。 しかし、そのディレクトリのサブディレクトリ内のファイルについても、再帰的に変換を行いたいのです。 grep -r などと組み合わせればよいのかとも思ったのですが、結局よくわかりませんでした。 よろしくお願いいたします。

  • 複数のファイルをsedで処理したいけど・・・

    こんにちは。sedでテキストファイルの文字の変換をしています。でも、 001.txt 002.txt 003.txt のように同じ変換をしたいファイルが延々とあります(涙) sed -e 's/a/b/g' 001.txt > 001convert.txt のように一つずつやっているととても大変です。 なのでワイルドカードが使えるかなと sed -e 's/a/b/g' *.txt > *convert.txt とやったら「*convert.txt」というのが一つだけできてしまいました。 変です・・・。 正しくはどのようにコマンドを書けばいいのですか? 教えてください!!

  • 複数PDFファイル内の特定文字列を一括置換したい

    社名変更に伴ない、数百個あるPDFファイル内にある社名部分を新しい社名に置換したいのですが、 通常のsed(ストリームエディタ)やテキストファイル用置換ツールでは、文字列の検出は行われても置換ができなくて困っています。 置換個所・対象ファイルが多いので、 「検索」->「タッチアップツール」->「書き換え」->・・・ では、気が遠くなりそうです。 一括置換出切る方法・ツールがあれば教えて下さい。

  • 参照ファイルを用いて、複数のテキスト置換を一括で行

    参照ファイル(list.txt)を用いて、一括でファイルの中身(test.txt)を置換したいです。以下のようにワンライナーで書いたのですが、以下のようなエラーが出ました。 使っているのはMac Os10.15.5です。 何か問題があるのでしょうか? 間違っている点があれば教えていただきたいです。 sed 's/\([^\t]*\)\t\(.*\)/s|\1|\2|g/' list.list | xargs -I{} sed -i '{}' test.txt sed: 1: "/Users/owner/Desktop/DI ...": invalid command code o sed: 1: "/Users/owner/Desktop/DI ...": invalid command code o <list.txt> AAA aaa 111 222 abc efg ....