macos - 命令末尾\后面的多余字符

标签 macos sed

当我尝试使用sed在OSX中插入新行时,出现以下错误

extra characters after \ at the end of a command



当前文件内容为
{
'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

最佳答案

BSD/macOS sed需要一个实际的换行符来跟随a\ ,然后再添加文本:

sed -i '' "/localhost/ a\\
                        'dev.ops' => ['domain_name' => 'default', 'domain_type' => 'web'],
" FILENAME
  • 由于您使用"..."括起sed脚本,因此a\必须表示为a\\,以便\不会被误认为是行继续符。
  • 通常,最好使用'...'来包含脚本参数,但是在这里"..."的使用很容易嵌入'实例。

  • 顺便说一句:GNU sed-可使用brew install gnu-sed通过Homebrew在macOS上安装-提供更多功能和更方便的语法-尤其是,不需要换行符即可遵循a函数;有关BSD/macOS sed和GNU sed之间的所有差异的讨论,请参阅我的this answer

    关于macos - 命令末尾\后面的多余字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40843994/

    相关文章:

    macos - 应用程序在后台时出现 NSVisualEffectView 图形错误

    linux - 如何从所有行中删除最后一个字符,但前提是它是某个字符

    linux - `sed: -e expression #1, char 1: unknown command: ` , '`

    macos - 通过终端添加应用到dock

    iphone - NSKeyedUnarchiver 未按预期运行

    macos - OS X brew 安装了 hping 但提示未找到命令

    java - Android 更新 17 似乎与外部 Jar 不兼容

    bash - bash 脚本中的 Sed/Awk

    bash - 删除两个模式(sed 或 awk?)之间出现的所有换行符

    python - 查找和替换特定列中的破折号