ファイル内の複数行の文字列を置き換える

ファイル内の複数行の文字列を置き換える

1つの複数行文字列を別の複数行文字列に置き換えることで、更新したいファイルがたくさんあります。おおよそ次のようになります。

* Some text, 
* something else
* another thing

私はそれを次に変更したいと思います:

* This is completely
* different text

その結果、置換後の最初のテキストブロックを含むファイルには2番目の文字列が含まれます(ファイルの残りの部分は変更されていません)。

問題の一部は、更新するファイルシステムでファイルのリストを見つける必要があることです。私はこれを達成するためにgrepを使用できると思います。 (複数行の文字列ではそれほど簡単ではありませんが)sedを介してパイプできますか?

見つけることができるショートカットがありますか? Sedはオプションなのに\nなどを追加しなければならないのでぎこちないですね。 「このファイルから入力を受け取り、このファイルと一致させ、他のファイルの内容に置き換えてください」と言う方法はありますか?必要に応じてPythonを使用できますが、高速で簡単なものが必要なので、利用可能なユーティリティがある場合は、スクリプトを直接作成する(方法を知っています)を作成するよりもPythonを使用する方がよいでしょう。

ベストアンサー1

1 つ以上の入力ファイルで、「Some...\n...Thing」を「new」ファイルの内容に置き換えます。

perl -i -p0e 's/Some.*?thing\n/`cat new`/se' input.txt ...
  1. -i input.txtを直接変更してください。
  2. -p0 入力ファイルファイルをフルルック飲んで最後に印刷します。
  3. s/regexp/.../s 正規.表現では.|\n
  4. s/.../exp/e 次に交換eval(exp)
  5. new - 代替テキストを含むファイル(完全に...別のテキスト)
  6. 役に立つ場合は、元のテキストを展開できます。s/Some text\n...\n...thing\n/...

おすすめ記事