当我尝试使用sed在OSX中插入新行时,我收到以下错误
在命令结尾处\后的额外字符
当前文件内容为
{
'localhost' => ['domain_name' => 'default', 'domain_type' => 'mobile'],
}
预期内容
{
'localhost' => ['domain_name' => 'default', 'domain_type' => 'mobile'],
'dev.ops' => ['domain_name' => 'default', 'domain_type' => 'mobile'],
}
我正在使用的命令是
sed -i '' "/localhost/a\ 'dev.ops' => ['domain_name' => 'default', 'domain_type' => 'web']," FILENAME
答案 0 :(得分:8)
BSD / macOS sed
要求实际换行符跟随a\
,然后才能追加文字:
sed -i '' "/localhost/ a\\
'dev.ops' => ['domain_name' => 'default', 'domain_type' => 'web'],
" FILENAME
"..."
封闭了sed
脚本,因此a\
必须表示为a\\
,以便\
不会被误认为是'...'
线延续字符。
"..."
来封装您的脚本参数,但使用'
可以方便地嵌入sed
个实例。 暂且不说:GNU brew install gnu-sed
- 可以通过Homebrew使用a
安装在macOS上 - 提供更多功能和更方便的语法 - 特别是,无需关注换行符sed
函数;有关BSD / macOS sed
和GNU {{1}}之间所有差异的讨论,请参阅我的this answer。
答案 1 :(得分:1)
使用sed p
命令复制行,然后替换
sed '/localhost/p; s/localhost/dev.ops/' FILENAME
输出
{
'localhost' => ['domain_name' => 'default', 'domain_type' => 'mobile'],
'devops' => ['domain_name' => 'default', 'domain_type' => 'mobile'],
}
或在OSX上进行编辑而不保留备份,请使用-i ''
:
sed -i '' -e '/localhost/p; s/localhost/dev.ops/' FILENAME