在 ed 中搜索 X 但不搜索 Y

在 ed 中搜索 X 但不搜索 Y

在编辑器 sam 中,可以使用以下命令搜索并打印字符串“ed”,但不能搜索并打印“red”:

,x./*\n/ g/ed v/red p

我试图找到一种方法在编辑中做类似的事情。我想搜索字符串“ed”但不获取带有以下内容的行:

r编辑,爱编辑, 加载编辑, ETC。

我熟悉 v 命令,但不确定如何将其与 ag 命令结合使用,或者是否可以在 ed 中使用。

答案1

最好使用包含单词边界标记的正则表达式来完成此操作:

g/\<ed\>/p

请注意,我并不完全熟悉,sam因此我无法评论您所显示的编辑表达式。上面的表达式将打印每个线含有单词 eded,即前面和后面不是 a 的字符串单词字符。单词字符是集合中的字符[[:alnum:]_]。和\<\>零宽度断言,并且将在单词字符和非单词字符之间的边界处匹配。

\<\>非标准的,但在 GNU 系统和某些 BSD 系统上可用。 macOS 使用[[:<:]]and[[:>:]]来代替,而 GNU 系统还可以\b在单​​词的开头和结尾使用 and 来匹配。

如果您想以可移植的方式执行此操作,则必须进行匹配[^[:alnum:]_]ed[^[:alnum:]_],但还要记住考虑特殊情况,即单词出现在行的开头或结尾,或者ed一行中仅有两个字符。

答案2

正如 Kusalananda 答案的延伸,Ex 也是 POSIX 编辑器POSIX 确实要求它支持\< \>单词锚。所以我建议只使用

g/\<ed\>/p

但在前。

相关内容