edエディタでこのコマンド
/string.start/;/string.end/dp
,
との間のすべての単語を削除しました(代わりに使用された行全体ではありません;
)。string.start
string.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
。私のシステムのed
GNUと基本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
つまり、その式に一致するすべての行に個別に置換が適用されます。