bash脚本中的sed在与“一起运行时终止”;未终止地址regex“;

bash脚本中的sed在与“一起运行时终止”;未终止地址regex“;,regex,bash,shell,scripting,sed,Regex,Bash,Shell,Scripting,Sed,我正在组装的bash脚本有一些问题 $2是一个类似于启动期间提供的“line_old”的字符串。塞德死了 sed: -e expression #1, char 15: unterminated address regex 以下是我的代码片段: redisconfig() { CMD=“ssh-q-t-i$HOME/.ssh/amazon-key.pemubuntu@10.20.10.1" line_old=“ENV['REDIS\u URL']='redis://redis:X9g532mq

我正在组装的bash脚本有一些问题

$2
是一个类似于启动期间提供的“line_old”的字符串。塞德死了

sed: -e expression #1, char 15: unterminated address regex
以下是我的代码片段:

redisconfig()
{
CMD=“ssh-q-t-i$HOME/.ssh/amazon-key.pemubuntu@10.20.10.1"
line_old=“ENV['REDIS\u URL']='redis://redis:X9g532mq21yY4@ip-10-112-143-152美国西部2号计算机内部:6379“
line_new=“ENV['REDIS\u URL']=”redis://redis:X9gKQasdg2yY4@$2:6379'"
updateconfig=“$($CMD sed”/$line\u old/c\$line\u new/”/home/ubuntu/config/testing.rb)
results=“$($CMD grep'REDIS_URL'/home/ubuntu/config/testing.rb)”
echo$updateconfig
echo$结果
}
你知道我怎么了吗?非常感谢


我认为问题在于
/
中的
$line\u old
$line\u new

它会导致
sed
分隔符出现问题

我希望我有你的工作档案,但我可以告诉你一个方法:
您可以对不同的分隔符使用
sed
,例如:

$ echo 'foo' | sed s#foo#bar#
bar
更多。


我认为问题在于
/
中的
$line\u old
$line\u new

它会导致
sed
分隔符出现问题

我希望我有你的工作档案,但我可以告诉你一个方法:
您可以对不同的分隔符使用
sed
,例如:

$ echo 'foo' | sed s#foo#bar#
bar

更多信息。

请参阅。
$line\u old
中的斜杠可能被解释为分隔符。请尝试转义它们。@ghoti:或者在
sed
命令中使用另一个分隔符,例如
|
。即使转义斜杠,似乎也会让我挂断字符15。我认为这意味着$line\u old的字符15,它是一个单引号。@ghoti:您可以使用
\121
来使用“1”作为1地址的分隔符。类似地,
\\124; pattern
使用管道。请参阅。
$line\u old
中的斜杠可能被解释为分隔符。请尝试转义它们。@ghoti:或者在
sed
命令中使用另一个分隔符,例如
|
。即使转义斜杠,似乎也会让我挂断字符15。我认为这意味着$line\u old的字符15,它是一个单引号。@ghoti:您可以使用
\121
来使用“1”作为1地址的分隔符。类似地,
\\124; pattern
使用管道。正则表达式中的方括号和其他正则表达式特殊项也必须反斜杠转义。这在shell/sed中是可行的,但现在我要转到Perl了。Zulu给你!:`redisconfig(){CMD=“ssh-q-t-i$HOME/.ssh/amazon-key.pemubuntu@128.59.120.21“line_old=“ENV['REDIS_URL']=”redis://redis:X9g55eUPmq01yY4@ip-10-225-52-138.us-west-2.compute.internal:6379''line_new=“ENV['REDIS_URL']”redis://redis:X9g55eUPmq01yY4@$2:6379'“echo$line\u old echo$line\u new updateconfig=“$($CMD sed-i”|$line\u old |$line\u new|“/home/ubuntu/config/testing.rb)”results=“$($CMD grep'REDIS_URL'/home/ubuntu/config/testing.rb)”echo$updateconfig echo$results}$1`您可以简单地创建测试文件并将我们正在搜索的行放入其中。regex中的方括号和其他regex特殊值也必须是反斜杠转义的。在shell/sed中这是可行的,但此时我将转到Perl。Zulu给您!:`redisconfig(){CMD='ssh-q-t-i$HOME/.ssh/amazon-key.pemubuntu@128.59.120.21“line_old=“ENV['REDIS_URL']=”redis://redis:X9g55eUPmq01yY4@ip-10-225-52-138.us-west-2.compute.internal:6379''line_new=“ENV['REDIS_URL']”redis://redis:X9g55eUPmq01yY4@$2:6379'“echo$line\u old echo$line\u new updateconfig=“$($CMD sed-i”|$line\u old |$line\u new |”/home/ubuntu/config/testing.rb)“results=“$($CMD grep'REDIS_URL'/home/ubuntu/config/testing.rb)”echo$updateconfig echo$results}$1`您只需创建测试文件并将我们正在搜索的行放入其中即可。