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

时间:2019-09-20 20:44:05

标签: bash 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

1 个答案:

答案 0 :(得分:0)

请参见Treatment of backslashes across shells

  

只需将每个\\替换为\,以告诉外壳程序“我想要一个字面意义上的$

您需要对反斜杠进行转义,因为它充当双引号中的转义字符,例如,表示插入插值var的gitconfig字符。