当我尝试使用sed在OSX中插入新行时,我收到以下错误
在命令结尾处\后的额外字符
当前文件内容是
{
'localhost' => ['domain_name' => 'default', 'domain_type' => 'mobile'],
}
Run Code Online (Sandbox Code Playgroud)
预期的内容是
{
'localhost' => ['domain_name' => 'default', 'domain_type' => 'mobile'],
'dev.ops' => ['domain_name' => 'default', 'domain_type' => 'mobile'],
}
Run Code Online (Sandbox Code Playgroud)
我正在使用的命令是
sed -i '' "/localhost/a\ 'dev.ops' => ['domain_name' => 'default', 'domain_type' => 'web']," FILENAME
Run Code Online (Sandbox Code Playgroud)
mkl*_*nt0 10
seda\在要追加的文本之前,BSD/macOS 需要遵循实际的换行符:
sed -i '' "/localhost/ a\\
'dev.ops' => ['domain_name' => 'default', 'domain_type' => 'web'],
" FILENAME
Run Code Online (Sandbox Code Playgroud)
"..."附上你的sed脚本,a\都必须表示为a\\使\不误续行字符.
'...'封装你的脚本参数,但这里的"..."使用方便了'实例的轻松嵌入.顺便说一句:GNU sed-安装上通过的MacOS 家酿使用brew install gnu-sed-提供了更多的功能和语法更方便-值得注意的是,无需换行跟随a功能; 有关BSD/macOS sed和GNU 之间所有差异的讨论sed,请参阅我的答案.
使用 sedp命令复制行,然后替换
sed '/localhost/p; s/localhost/dev.ops/' FILENAME
Run Code Online (Sandbox Code Playgroud)
输出
{
'localhost' => ['domain_name' => 'default', 'domain_type' => 'mobile'],
'devops' => ['domain_name' => 'default', 'domain_type' => 'mobile'],
}
Run Code Online (Sandbox Code Playgroud)
或者要在 OSX 上就地编辑而不保留备份,请使用-i '':
sed -i '' -e '/localhost/p; s/localhost/dev.ops/' FILENAME
Run Code Online (Sandbox Code Playgroud)