sed mac 用双引号将文本添加到特定行

sed mac 用双引号将文本添加到特定行

我尝试将其用作使用 sed 在 OSX 中的文件中添加一行的入门指南。 https://stackoverflow.com/questions/25631989/sed-insert-line-command-osx

sed -i '.json' '2i\
this is a test place
    ' dummy.txt

以上有效。但我需要进行扩展,所以我从一些简单的事情开始,只需替换为双引号,例如

sed -i '.json' "2i\
this is a test place
    " dummy.txt

为什么我得到command i expects \ followed by text?或者如何在 Mac 上使用双引号将文本添加到特定行?

答案1

$ sed "2i\\
These are words on\\
multiple lines\\
" input
1
These are words on
multiple lines
2
3
4
5
6
7
8
9
10

您需要转义反斜杠,以便sed解析它并转义您要转义的文字换行符sed而不是 shell。

$ sed '2i\
thing' input

通过强引号,一切都按字面意思传递,所以sed看到<2> <i> <literal linefeed>

$ sed "2i\
thing" input

使用弱引号,shell 在解析字符串时首先获得权限,因此sed会看到<2> <i> <linefeed>,这是一个语法错误。

相关内容