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"