Ed:ある文字列と別の文字列を置き換えることは可能ですか?

Ed:ある文字列と別の文字列を置き換えることは可能ですか?

edエディタでこのコマンド

/string.start/;/string.end/dp

,との間のすべての単語を削除しました(代わりに使用された行全体ではありません;)。string.startstring.end

string.start との間に代替/交換が可能ですstring.endか?

私はこの行を試しました

s/string.start/;/string.end/mynewline../

この

/string.start/;/string.end/s /mynewline../

しかし、どちらも正しいことではありません。

私の目標は、コマンドでこのようなことを行うことです。

/string.start/;/string.end/dp

テキスト:

This text start with string.start and other words bla bla bla bla then end with string end.

~になる

This text start with 

こんなことが欲しい

This text start with string.start and other words bla bla bla bla then end with string end.

~になる

This text start with my substituted string.

忘れました:1行は使いやすいので、代替は別の行に適用する必要があります。 s/stringstart.*.string.end/

答え1

式がs/string.start/;/string.end/mynewline../有効な式ではないようですed。私のシステムのedGNUと基本BSDはどちらも理解していません。ed私も仕事に行けません/string.start/;/string.end/dp。 「この行から文書の終わりまで」の;ようなアドレスですが、コマンドラインの途中で見ればわかりませんね。.,$

最も簡単な解決策は、次を使用することです。

s/string.start.*string.end/with my substituted string/p

string.startこれは実際にあなたが望むものですが、現在の行の最初の一致と最後の一致(一致するテキストを含む)の間のテキストを置き換えることstring.endです。

some.text(0) -> other.text(2)これは、最初の角かっこの文字列を次に置き換えるのと似ています100

s/([^)]*)/(100)/

つまり、開いている区切り文字、テキスト、閉じる区切り記号を一致させ、必要なテキストに置き換えます(この場合、区切り文字は保持する必要があります)。

交換を適用するにはみんなドキュメントの行にコマンドの前に%1,$または単に,)を追加します。

%s/string.start.*string.end/with my substituted string/p

最後の行だけが印刷されます。

影響を受けるすべての行を印刷するには、次のようにします。

g/string.start.*string.end/ s//with my substituted string/p

つまり、その式に一致するすべての行に個別に置換が適用されます。

関連情報