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。