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

Bash sed正则表达式替换捕获组不插值,bash,sed,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

我试图使用
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
作为输出。看来我的第一组不是插值

有没有关于如何解决这个问题的建议

sed --version
GNU sed version 4.2.1
见:

只需将每个
\
替换为
\
,告诉shell“它是一个我想要的纯
\

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

请参见:

只需将每个
\
替换为
\
,告诉shell“它是一个我想要的纯
\


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

我无法重现该问题。但我建议使用单引号而不是双引号,因为反斜杠在单引号中没有特殊意义。你在其他地方的意思是什么?哪个操作系统?哪个贝壳?什么版本的sed?我敢打赌你使用的是另一个失败的shell,
\1
正在变成
1
echo“\1”
的输出是什么?只是为了测试。他建议你做一个实验,直接进入,而不是通过sed。我无法重现这个问题。但我建议使用单引号而不是双引号,因为反斜杠在单引号中没有特殊意义。你在其他地方的意思是什么?哪个操作系统?哪个贝壳?什么版本的sed?我敢打赌你使用的是另一个失败的shell,
\1
正在变成
1
echo“\1”
的输出是什么?只是为了测试。他建议你做一个实验,直接进入,而不是通过sed。