我有一个包含字符和数字的字符串,例如
one0.1231two,
我想更换一和二通过新的字符序列
three0.1231four,
同时保持之间的数字不变。然而,虽然两个子串一和二始终保持不变,其间的数字序列的长度可能会有所不同;所以,例如,
one0.000230002two, one1293.02two, or one42two
可能发生。到目前为止,我只能使用 sed 和正则表达式对固定位数进行替换。
仅出现以下情况一和二应替换如上所示的周围数字。所有其他事件必须保持不变。
答案1
你可以这样做:
sed 's/one\([[:digit:].]*\)two/three\1four/g'
这\(...\)
捕获\1
was 在(这里是 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