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.
我忘记了:替换必须适用于不同的行,因为一行很容易使用
s/stringstart.*.string.end/
答案1
该表达式s/string.start/;/string.end/mynewline../
似乎不是有效的ed
表达式。我的系统上的GNUed
和本机 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)
by中第一个括号中的字符串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
即,将替换分别应用于与表达式匹配的所有行。