首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >sed错误:“‘s’命令的RHS上的引用\1无效”

sed错误:“‘s’命令的RHS上的引用\1无效”
EN

Stack Overflow用户
提问于 2013-05-20 02:06:14
回答 4查看 101.2K关注 0票数 125

作为colorize script for maven的核心,我运行了几个替换命令。其中一个sed命令使用了一个正则表达式,该表达式在shell中以discussed here的形式工作。当前的(不工作的)实现可以在here中找到。

当我将该命令的一个变体包含到脚本中时,会出现不同的行为:

变体1:

代码语言:javascript
复制
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"

适应脚本的

代码语言:javascript
复制
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \

错误:外壳输出相同的信息,就好像我要输入$ sed一样。奇怪!?

变体2:

代码语言:javascript
复制
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"

适应脚本的

代码语言:javascript
复制
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \

错误:

sed:-e表达式#7,char 59:对‘s’命令的RHS

的引用\1无效

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-20 02:10:08

你不是真的需要捕获才能让它工作吗?即,对于变体#2:

代码语言:javascript
复制
-r -e "s/WARNING: (\([a-zA-Z0-9./\\ :-]\+\))/${warn}WARNING: \1${c_end}/g" \

(注:未测试)

如果没有-r参数,除非每个括号都使用\字符进行转义,否则反向引用(如\1)将不起作用。

对于-r,参数反向引用(如\1)将不起作用,除非圆括号没有转义。

票数 81
EN

Stack Overflow用户

发布于 2016-01-19 06:34:55

对于未转义的括号,此错误很常见。避开它们,再试一次。

例如:

代码语言:javascript
复制
/^$/b
:loop
$!{
N
/\n$/!b loop
}
s/\n(.)/\1/g

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

代码语言:javascript
复制
/^$/b
:loop
$!{
N
/\n$/!b loop
}
s/\n\(.\)/\1/g
票数 58
EN

Stack Overflow用户

发布于 2019-03-06 22:55:45

如果未提供-r/--regexp-extended选项,则必须转义捕获括号。

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16637799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档