【问题标题】:Bash sed function not working on Mac OS XBash sed 功能在 Mac OS X 上不起作用
【发布时间】:2014-10-19 02:47:17
【问题描述】:

谁能告诉我如何更改此命令:

sed -i.bak "/group :test/ a gem 'selenium-webdriver'" Gemfile 

要在 Mac 上工作? 收到此错误:

sed: 1: "/group :test/ a gem 'se ...": command a expects \ followed by text

我试图做一个\但没有帮助。

【问题讨论】:

  • 您输入的命令是否正确? -i 和 .bak 之间是否有空格,或者只是将其放入 SO 中的拼写错误?
  • 尝试了有和没有空格。
  • 它在另一行之后添加一行。在 Linux 上工作。
  • OS X 用户空间是 BSD 衍生产品,使用 BSD sed。它没有实现 GNU 扩展。

标签: linux macos sed


【解决方案1】:

作为替代方案,您可以在 awk 中做同样的事情:

cp Gemfile Gemfile.bak
awk '1;/group :test/{print "gem '"'"'selenium-webdriver'"'"'"}' Gemfile > tmp && mv tmp Gemfile

开头的1 表示文件中的每一行都被打印。当模式匹配时,将附加该行。

要在字符串中获取引号,您必须关闭单引号,在双引号内写入单引号,然后重新打开单引号以继续执行 awk 命令。简单;)

【讨论】:

    【解决方案2】:

    您使用a 命令的方式是a GNU sed extension,即用空格分隔a 与要插入的文本。可移植的方法是使用反斜杠,后跟换行符:

    $ echo 'group :test' | sed "/group :test/ a\\
    gem 'selenium-webdriver'"
    group :test
    gem 'selenium-webdriver'
    

    确保正确引用反斜杠,以便将其传递给sed,而不是被shell 吞噬。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      相关资源
      最近更新 更多