• 締切済み

sedを再帰的に

ディレクトリ単位で、再帰的に文字列置換を行いたいのですが、 sedコマンドでそのようなオプションはありますでしょうか? また、よい方法があればご教授お願い致します。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

sed にはないはずです. どういうことを求めているのかわかりませんが, find + xargs なり find + while なりでいけませんか? 例えば find . -type f |while read file; do sed -e s/あれ/それ/ $file > $file .tmp && mv $file.tmp $file; done みたいに.

takatokoko
質問者

補足

そうです、これです。 ご回答、有難うございました!

関連するQ&A

  • cshのsed

    ヤマトです。 cshのsedについて質問します。 環境はRed Had Linux7.2です。 文字列置換でsedを使っています。 置換文字列に'/'が入ってしまう場合正常に動作しません。 原因は分かります。'/'が多いって事ですよね(曖昧な言い方ですみません) どのようにしたら、できるでしょうか? 以下に、サンプルを書きます。 ====SAMPLE.sh(一部抜粋)==== set DATA_DIR = /home/hoge set FILE_NAME = hoge.txt sed "s/__DIR__/$DATA_DIR/g" < FILE_NAME > FILE_NAME.sed ====hoge.txt==== 置換した ディレクトリは __DIR__/です ====hoge.txt.sed(作成したいファイル)==== 置換した ディレクトリは /home/hoge/です どのようにsedしたら良いのでしょうか? 教えて頂けると有り難く思います。宜しくお願いします。

  • sed コマンドについて

    はじめまして 当方、初心者で勉強の身です。ご回答頂けたら幸いです。 linuxのシェルファイルが100以上あり、こちらの全ファイル内に含まれる文字列"ABCDE"を文字列"12345"に置換をしたいと思っています。 sed コマンドで sed -e "s/ABCDE/12345/g" *.csh のように実行しても、画面上に変換後が表示されるだけで その後、ファイルを見ても置換されていません。 どのようにすれば、全ファイルが修正されるのでしょうか。 以上です。回答の方をよろしくお願い致します。

  • sedでの置換がうまくできません。

    sedを使用して以下の様な文字列を置換したいと考えています。 iPar(\"w\") → 何かの文字列 そこで以下のようなsedスクリプトを作成しました。 s/iPar\(\"w\"\)/test/g  → a.sed 使用してみました。具体的には↓のコマンド >sed -f a.sed inputデータ >outputデータ しかし結果ファイルをみても何も変わってくれません。 なにが悪いのでしょうか? どなたかご指南下さい。

  • Unix-sedコマンドによる置換について

    sedでコマンド次の文字列をスペースに置換したいのですが うまくいきません。BF-DR1 =(0)A[7]OPN-ENDはスペースや大カッコが含まれています。 与えたコマンドは、 sed -e "s/ BF-DR1 =(0)A[7]OPN-END//g" <bf1Open.log>rrr.txt ですが、出力ファイルはまったく置換されていませんでした。 お分かりになる方どなたかご教授ください。

  • sedコマンドに関して

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

  • ["]でくくられた文字列内に存在する[,]をsedで処理する正規表現について

    PostgreSQLを使うのは初心者です。 csvファイルよりCOPYコマンドを使ってPostgreSQLのテーブルにデータを入れようとしています。 もとになるcsvファイルは、データの区切りは[,]であり、文字列は["]でくくられ、さらに["]でくくられた文字列には[,]が存在します。 <csvデータ例> 123,"aaa","b,cde",234 いろいろ調べてみた結果、COPYコマンドを実行する前に、sedコマンドで正規表現を用いて置換をすればよいとの結論にたどり着いたので、 (1)["]でくくられた文字列内の[,]を[#]に置換する  → [123,"aaa","b,cde",234] => [123,"aaa","b#cde",234] に置換したい (2)["]を除く(sed 's/\"//g')  → [123,"aaa","b#cde",234] => [123,aaa,b#cde,234] に置換したい (3)[,]をtabに置換する(sed 's/,/\t/g')  → [123,aaa,b#cde,234] => [123 aaa b#cde 234] に置換したい (4)[#]を[,]に置換する(sed 's/#/,/g')  → [123 aaa b#cde 234] => [123 aaa b,cde 234] に置換したい を順番に行う処理を考えていますが、(1)で記述する正規表現がわかりません。 正規表現も初めて扱う初心者ですので、色々試してみましたが、うまく置換できません。 どなたかご教授の程をお願いします。 なお環境は、RedHatLinux9 + PostgreSQL-7.4.9です。 以上、宜しくお願い申し上げます。

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

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

  • hp-uxのsedコマンドについて教えてください

    hp-uxのコマンドで困っております。 どなたか知恵をお貸しいただけたらと思います。 あるファイルより条件に合致する特定の文字列の置換を行い別のファイルとして保存したいと考えております。 このときに以下のsedのコマンドを利用しているのですが、一部上手くいかなくて難儀しております。 コマンド(※文字列の前後にわかりやすく<>を付けていますが実際には入力しません) sed "/<文字列(1)>[^0-9]/"s"/<文字列(1)>/<文字列(2)>/"g aaaa.txt > bbbb.txt コマンドの内容 aaaa.txtの中を検索し文字列(1)かつ文字列(1)のすぐ後ろの文字が数字でない場合(例えばIPアドレスで10.xxx.xxx.1というIPアドレスを置換したい場合に10.xxx.xxx.10や10.xxx.xxx.100を含めないようにする場合です)、文字列(1)を文字列(2)に置換しbbbb.txtに保存する。 (※上記コマンドのみだと条件に合致する文字列のたびにbbbb.txtが上書きされるため一番最後の条件に合致する文字列しか置換されませんので、実際にはコマンドのたびにbbbb.txtをaaaa.txtに上書きコピーするステップを入れています) この際、困っておりますのが元ファイルaaaa.txtにある各行の文字列が以下の場合に認識がされず置換が行われない点です。 (1)10.xxx.xxx.1<タブ>xxxxxxxxxの場合(※条件に合致する文字列のすぐ後ろにタブ文字が入っている場合) (2)10.xxx.xxx.1<改行>の場合(※条件に合致する文字列のすぐ後ろが改行となっており同一行にそれ以上文字が存在しない場合) 上記の(1),(2)のような行は置換が行われず、元の値のままとなってしまいます。 これらを解決する方法がありましたらよろしくお願いいたします。

  • sedコマンドを使用して、文字の置換を行いのですが助けてください。

    sedコマンドを使用して、文字の置換を行いのですが助けてください。 sedコマンドやawkコマンドなどを使って、aliasesファイルの置換を行いたいのですが、 うまくいかないので教えていただけないでしょうか? 知りたいのは、次のような置換を一括で行うことのできるコマンドです。 ■置換前のファイル ================= AAAA:  :include:/file/name BBBB:  :include:/file/name CCCC:  :include:/file/name ================= ■置換後のファイル(希望する置換結果) ※1フィールド目の任意の文字列をメールアドレスのローカルパートとして利用したい ================= AAAA:  AAAA@example.com BBBB:  BBBB@example.com CCCC:  CCCC@example.com ================= 以上です。

  • サブディレクトリ内のすべてのファイルの文字の置換

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