作为colorize script for maven的核心,我运行了几个替换命令。其中一个sed
命令使用了一个正则表达式,该表达式在shell中以discussed here的形式工作。当前的(不工作的)实现可以在here中找到。
当我将该命令的一个变体包含到脚本中时,会出现不同的行为:
变体1:
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
适应脚本的:
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
错误:外壳输出相同的信息,就好像我要输入$ sed
一样。奇怪!?
变体2:
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
适应脚本的:
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
错误:
sed:-e表达式#7,char 59:对‘s’命令的RHS
的引用\1无效
发布于 2013-05-20 02:10:08
你不是真的需要捕获才能让它工作吗?即,对于变体#2:
-r -e "s/WARNING: (\([a-zA-Z0-9./\\ :-]\+\))/${warn}WARNING: \1${c_end}/g" \
(注:未测试)
如果没有-r
参数,除非每个括号都使用\
字符进行转义,否则反向引用(如\1
)将不起作用。
对于-r
,参数反向引用(如\1
)将不起作用,除非圆括号没有转义。
发布于 2016-01-19 06:34:55
对于未转义的括号,此错误很常见。避开它们,再试一次。
例如:
/^$/b
:loop
$!{
N
/\n$/!b loop
}
s/\n(.)/\1/g
应在每个括号前使用反斜杠进行转义:
/^$/b
:loop
$!{
N
/\n$/!b loop
}
s/\n\(.\)/\1/g
发布于 2019-03-06 22:55:45
如果未提供-r
/--regexp-extended
选项,则必须转义捕获括号。
https://stackoverflow.com/questions/16637799
复制相似问题