如何替换字符串中直到第三次出现分隔符的部分?

如何替换字符串中直到第三次出现分隔符的部分?

我有一个像这样的字符串

AAA: BBB: CCC: DDD: EEE

我需要更换

AAA: BBB: CCC:

FF:

所以它看起来像

FFF:DDD:EEE

谢谢。

答案1

使用 GNUsed和扩展正则表达式 ( -r),以下内容应该有效:

sed -r "s/^([^:]*:){3}/FFF:/"

或者sed <...> filename.txtecho "$original_string" | sed <...>

这将替换一个子字符串,该子字符串从行的开头 ( ^) 开始,连续三次包含由“除冒号 ( [^:]) 之外的任何内容”组成的模式,后跟一个冒号,模式为FFF:

答案2

你可以使用这个:

$ sed -e 's/:/\n/3;s/.*\n/FFF:/' file

这里我们利用 sed 中的功能来实现第 n 次更改,n<=512。此外,换行符保证不会在模式空间中看到,除非它是通过 G、H、N 预先引入的,或者添加了文字换行符,就像我们的例子一样。

这是gnu sed主义。我们对 Posix sed 使用转义文字换行符。

相关内容