web-dev-qa-db-ja.com

ファイルの内容を使用して、SEDを使用して文字列を置き換えます

文字列 "fox"のすべての反復をmyFile.txtの文字列コンテンツ全体に置き換えるMacシェルスクリプトのsedコマンドは何でしょうか。

myFile.txtは、改行とすべての種類の文字を含むhtmlコンテンツになります。例は

    </div>
  </div>
  <br>
  <div id="container2">
    <div class="question" onclick="javascript:show('answer2')";>

ありがとう!

編集1

これは私の実際のコードです:

sed -i.bkp  '/Q/{
s/Q//g
r /Users/ericbrotto/Desktop/question.txt
}' $file

実行すると、次のようになります。

sed in place editing only works for regular files. 

そして私のファイルでは、Qはたくさんの漢字(!)に置き換えられています。奇妙な!

27
Eric Brotto

rコマンドを使用できます。入力に「キツネ」が見つかった場合...

/fox/{

...無料で交換...

    s/fox//g

...そして入力ファイルを読みます:

    r f.html
}

次のようなファイルがある場合:

$ cat file.txt
the
quick
brown
fox
jumps
over
the lazy dog
fox dog

結果は次のとおりです。

$ sed '/fox/{
    s/fox//g
    r f.html
}' file.txt
the
quick
brown

    </div>
  </div>
  <br>
  <div id="container2">
    <div class="question" onclick="javascript:show('answer2')";>
jumps
over
the lazy dog
 dog
    </div>
  </div>
  <br>
  <div id="container2">
    <div class="question" onclick="javascript:show('answer2')";>

[〜#〜] edit [〜#〜]:処理中のファイルを変更するには、-iフラグをsedに渡すだけです:

sed -i '/fox/{
    s/fox//g
    r f.html
}' file.txt

一部のsedバージョン(私自身のものなど)では、-iフラグに拡張子を渡す必要があります。これは、ファイルの古い内容を含むバックアップファイルの拡張子になります。

sed -i.bkp '/fox/{
    s/fox//g
    r f.html
}' file.txt

そして、これはワンライナーと同じもので、Makefileとも互換性があります

sed -i -e '/fox/{r f.html' -e 'd}'
54
brandizzi

最終的に私が行ったものは、オンラインで見つけた多くのソリューションよりもはるかに簡単です。

str=xxxx
sed -e "/$str/r FileB" -e "/$str/d" FileA

次のようなテンプレートをサポートします。

str=xxxx
sed -e "/$str/r $fileToInsert" -e "/$str/d" $fileToModify
7
buddyp450