使用 sed 替换字符串中的字符,同时保持不同的数字序列不变

使用 sed 替换字符串中的字符,同时保持不同的数字序列不变

我有一个包含字符和数字的字符串,例如

one0.1231two,

我想更换通过新的字符序列

three0.1231four,

同时保持之间的数字不变。然而,虽然两个子串始终保持不变,其间的数字序列的长度可能会有所不同;所以,例如,

one0.000230002two, one1293.02two, or one42two 

可能发生。到目前为止,我只能使用 sed 和正则表达式对固定位数进行替换。

仅出现以下情况应替换如上所示的周围数字。所有其他事件必须保持不变。

答案1

你可以这样做:

sed 's/one\([[:digit:].]*\)two/three\1four/g'

\(...\) 捕获\1was 在(这里是 0 个或更多十进制数字或句点的序列)内匹配,因此可以在替换中引用它。

答案2

我建议使用以下sed替换:

$ s="one0.000230002two, one1293.02two, or one42two "
$ sed -E 's/([^ 0-9]+)([0-9]+(\.[0-9]+)?)([^ 0-9,]+)/three\2four/g' <<<"$s"
three0.000230002four, three1293.02four, or three42four

相关内容