Regex 意外标记附近的sed错误';(';其中(是搜索字符串的一部分)
我尝试在Makefile中搜索并替换给定的字符串,也就是说Regex 意外标记附近的sed错误';(';其中(是搜索字符串的一部分),regex,bash,sed,Regex,Bash,Sed,我尝试在Makefile中搜索并替换给定的字符串,也就是说 PROCFLAGS="SQLCHECK=SEMANTICS USERID=$(CONNECT)" 我想将code=ANSI_C添加到行中 PROCFLAGS="SQLCHECK=SEMANTICS USERID=$(CONNECT) CODE=ANSI_C" Sed应该做得很好。至少我是这么想的,但我无法理解调用Sed时出现的语法错误: sed -i'.bak' s:(CONNECT):(CONNECT) CODE=ANSI_C:g
PROCFLAGS="SQLCHECK=SEMANTICS USERID=$(CONNECT)"
我想将code=ANSI_C
添加到行中
PROCFLAGS="SQLCHECK=SEMANTICS USERID=$(CONNECT) CODE=ANSI_C"
Sed应该做得很好。至少我是这么想的,但我无法理解调用Sed时出现的语法错误:
sed -i'.bak' s:(CONNECT):(CONNECT) CODE=ANSI_C:g Makefile
我曾尝试添加-r
或转义括号\(\)
,但最终总是出现错误:
-bash: syntax error near unexpected token `('
在这里,我只能想一些我一定做错了的事情,因为许多其他替代品都很好用。将您的sed代码放在引号内
sed -i'.bak' 's:(CONNECT):(CONNECT) CODE=ANSI_C:g' Makefile
尝试引用括号内的项目。我认为Bash正在尝试在子shell中运行(连接)
sed -i'.bak' "s:(CONNECT):(CONNECT) CODE=ANSI_C:g" Makefile
当您将某些内容放在括号中时,bash会将其作为子shell中的命令运行
例如,尝试
(cd/tmp;pwd);pwd
。您将看到子shell打印/tmp
,但第二个pwd
将告诉您原始目录。是的,bash将尽其所能展开/interpet内容,然后再将它们传递给正在运行的程序。例如“*”(glob)将在传递到程序之前展开,除非它只匹配0或1个内容,然后按字面形式传递。