Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 意外标记附近的sed错误';(';其中(是搜索字符串的一部分)_Regex_Bash_Sed - Fatal编程技术网

Regex 意外标记附近的sed错误';(';其中(是搜索字符串的一部分)

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

我尝试在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 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个内容,然后按字面形式传递。