SED 正则表达式替换未插值的捕获组



我试图使用sed来替换时间戳中的纳秒:

sed -r "s/(([0-9]{2}:){2}[0-9]{2}.[0-9]{3})[0-9]*/1/g"

例:

echo "2019-07-15 19:12:26.327801+00" | sed  -r "s/(([0-9]{2}:){2}[0-9]{2}.[0-9]{3})[0-9]*/1/g"

在我的机器上本地工作,并产生2019-07-15 19:12:26.327+00作为输出。但是,当我在其他地方运行它时,我会2019-07-15 1+00作为输出。似乎我的捕获组 1 没有插值。

关于如何解决此问题的任何建议?

sed --version
GNU sed version 4.2.1

请参阅跨 shell 的反斜杠处理

只需将每个替换为\,即可告诉外壳"这是我想要的一字">

您需要转义反斜杠,因为它在双引号中充当转义字符,例如,对于表示内插变量的$字符。

最新更新