【问题标题】:My sed from a bash script terminates when ran with "unterminated address regex"当使用“未终止的地址正则表达式”运行时,我来自 bash 脚本的 sed 终止
【发布时间】:2012-07-20 02:00:11
【问题描述】:

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

$2 是一个类似于“line_old”的字符串,在启动期间提供。 sed 死于

sed: -e expression #1, char 15: unterminated address regex

这是我的代码 sn-p:

redisconfig ()
{
    CMD="ssh -q -t -i $HOME/.ssh/amazon-key.pem ubuntu@10.20.10.1"

    line_old="ENV['REDIS_URL'] = 'redis://redis:X9g532mq21yY4@ip-10-112-143-152.us-west-2.compute.internal:6379'"

    line_new="ENV['REDIS_URL'] = 'redis://redis:X9gKQasdg2yY4@$2:6379'"

    updateconfig="$($CMD sed "/$line_old/c\$line_new/" /home/ubuntu/config/testing.rb)"

    results="$($CMD grep 'REDIS_URL' /home/ubuntu/config/testing.rb)"

    echo $updateconfig

    echo $results    
}

知道我的 sed 会发生什么吗?非常感谢!

【问题讨论】:

  • 请看BashFAQ/050
  • $line_old 中的斜线可能被解释为分隔符。尝试逃脱它们。
  • @ghoti:或者只是在sed 命令中使用备用分隔符,例如|
  • 即使是转义斜线似乎也让我挂断了 char 15。我认为这意味着 $line_old 的 char 15 是单引号。
  • @ghoti:您可以使用 \121 将“1”用作 1addr 的分隔符。同样,\|pattern| 使用管道。

标签: regex bash shell scripting sed


【解决方案1】:


我认为麻烦在于// 中的$line_old$line_new
它会导致 sed 分隔符出现问题

我希望我有你的文件来处理它,但我可以给你方法:
您可以将sed 与不同的分隔符一起使用,例如:

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

更多here.

【讨论】:

  • 正则表达式中的方括号和其他正则表达式特殊项也必须进行反斜杠转义。它在 shell / sed 中是可行的,但此时我会转向 Perl。
  • Zulu 给你!:` redisconfig () { CMD="ssh -q -t -i $HOME/.ssh/amazon-key.pem ubuntu@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_old echo $line_new updateconfig="$($CMD sed -i "|$line_old|$line_new|" /home/ubuntu/config/testing.rb)" 结果="$($CMD grep 'REDIS_URL' /home/ubuntu/config/testing.rb)" echo $updateconfig echo $results } $1 `您可以简单地创建测试文件并将我们正在搜索的行放入其中。
猜你喜欢
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 2011-12-10
  • 2015-03-27
相关资源
最近更新 更多