sed错误:“在's'命令的RHS上无效的参考\ 1”

我运行几个替代命令作为Maven的着色脚本的核心。 其中一个sed命令使用了一个正则expression式,这个正则expression式可以在这里讨论的shell中find 当前(不工作)的实现可以在这里find。

当我在脚本中包含命令的变体之一时,会发生不同的行为:

变体1:

 $ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g" 

适应脚本:

 -re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \ 

错误: shell输出相同的信息,如果我input$ sed 。 奇怪!?


变体2:

 $ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g" 

适应脚本:

 -e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \ 

错误:

在's'命令的RHS中,sed:-eexpression式#7,字符59:无效的引用\ 1

难道你不需要真正捕捉到这个工作吗? 即对于变体2:

 -e "s/WARNING: (\([a-zA-Z0-9./\\ :-]\+\))/${warn}WARNING: \1${c_end}/g" \ 

(注:未经testing)

这个错误对于不被转义的圆括号是很常见的。 逃脱他们,然后再试一次。


例如:

 /^$/b :loop $!{ N /\n$/!b loop } s/\n(.)/\1/g 

在每个括号之前应该用反斜杠进行转义:

 /^$/b :loop $!{ N /\n$/!b loop } s/\n\(.\)/\1/g 

你需要逃脱/之后.

 sed -e "s/\([a-zA-Z0-9.\/\\ :-]\+\)/\1/g" 

或者,如果您不想担心转义,请使用|

 sed -e "s|\([a-zA-Z0-9./\\ :-]\+\)|\1|g" 

编辑:

 sed -e "s|WARNING: \([a-zA-Z0-9.-/\\ :]+\)|${warn}WARNING: \1${c_end}|g"