ファイル内のテキスト(シェルスクリプトコード)の大きなブロックを別のテキストブロックに置き換える必要があります。
sedを使用して複数行の文字列を置き換えるにはどうすればよいですか?で答え antakとマルチラインを置き換えることで答えブルースEdiger
しかし、私はそれらを使用するのにいくつかの問題を抱えています。
antakは既に回答で言及していますが、ファイル全体(
1h;2,$H;$!d;g;
)をバッファにストリーミングすることは、メモリが過負荷になるため、大きなファイルにはお勧めできません。sed
ブロック機能を使用して、ブロック外のテキストを変更せずに保持できることを知っています。この機能を使いたい。でも使ったらsed -i '/marker1/,/marker2/s/.*/new text (code)/' filename
ストリームごとに新しいテキスト(コード)を繰り返し挿入します。したがって、視覚的ブロックを1つのストリームとして作成する必要があります。以前のantakによって提案されたものと同様のものを使用しますが、ブロックに対して(ファイル全体ではなく)行います。
Bruce Edigerで述べたように、(ドット)
ex
で始まる追加機能を試すことはできますが、新しいテキスト(コード)にはドットで始まる行が含まれており、追加構文のドットと見なすことができます。この状況でどのように使用できますか?a
.
ex
'のdd
行数'は複数の行を削除する可能性がありますが、/ marker1 /と/ marker2 /の間に固定されていない(可変の)行数のブロックがある場合、新しいテキスト(コード)で置き換える場合、方法それ ?
sed
or ex
コマンドが機能するマスタースクリプト)。
r
置換テキストのソースがファイル内にある場合、別のファイルからテキストをコピーするためにread fileコマンドを使用しました。