Bash sed功能无法在Mac OS X上运行

时间:2014-08-25 21:24:03

标签: linux macos sed

任何人都可以告诉我如何更改此命令:

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

在Mac上工作? 得到此错误:

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

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

2 个答案:

答案 0 :(得分:3)

您使用a命令的方式是a GNU sed extension,即a与要插入的文本之间的空格。{{3}}。可移植的方法是使用反斜杠,然后换行:

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

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

答案 1 :(得分:0)

作为替代方案,您可以在awk中执行相同的操作:

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

开头的1表示文件中的每一行都会打印出来。匹配模式时会附加该行。

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