sed 插入行命令 OSX

Posted

技术标签:

【中文标题】sed 插入行命令 OSX【英文标题】:sed insert line command OSX 【发布时间】:2014-10-27 05:25:52 【问题描述】:

我正在尝试使用 sed 将文本插入文件的第三行,我在其他论坛上找到的语法是:

sed -i '' "3i\ text to insert" file

然而,当我使用这个时,我得到一个错误:

sed: 1: "3i\ text to insert": extra characters after \ at the end of i command

我似乎无法弄清楚是什么导致了问题。我正在使用 OSX,这就是为什么我有一个空的 ' ' 作为我的扩展名。

谢谢!

【问题讨论】:

【参考方案1】:

在 macOS 上使用 sed 将文本插入第一行并将其余部分放在新行上,这对我有用

sed -i '' '1 i \
Insert
' ~/Downloads/File-path.txt

【讨论】:

【参考方案2】:

我发现我必须在要插入的行的末尾插入一个\,否则它会在原始行的开头将它连接起来。所以,如果我想插入一个新的第三行,...

sed -i '' '3i\<br>
New line to be inserted.\<br>
' file

【讨论】:

【参考方案3】:

使用 ANSI-C 引用的 OSX 单行代码:

sed -i '' '3i\'$'\n''text to insert' file

改编自https://***.com/a/24299845/901597

【讨论】:

【参考方案4】:

您应该在\ 后面直接放置一个换行符:

sed '3i\
text to insert' file

这实际上是POSIX specification 定义的行为。 GNU sed 允许您指定要在同一行插入的文本这一事实是一个扩展。


如果由于某种原因需要在 sed 命令周围使用双引号,则必须在第一行末尾转义反斜杠:

sed "3i\\
text to insert" file

这是因为双引号字符串首先被 shell 处理,而\ 后跟换行符被删除:

$ echo "abc\
def"
abcdef

【讨论】:

我想多加一个 +1,指出“3i 位之后插入的文本”是 GNU 扩展(但我​​只能给出其中一个)。跨度> @JonathanLeffler 我会代表你奖励他另一个 +1 :-)【参考方案5】:

如果您想修改特定文件类型的文件(在我的情况下为 .sh),请使用此命令。

sed -i '.sh' '3i\
mymodified text to insert' temp.sh

确保斜线(“\”)后有换行符

【讨论】:

【参考方案6】:

这对我有用

sed -i '' '3i\
text to insert' file 

【讨论】:

【参考方案7】:

这里是如何用一行语法来做到这一点

sed -i '' -e "2s/^//p; 2s/^.*/text to insert/" file

重复第二行:2s/^//p;

用您的文本替换新行:2s/^.*/text to insert/

【讨论】:

我相信这种方法可以在任意两行 n 和 n+1 之间添加一行。但是,在第一行尝试此操作会遇到another post 中描述的问题【参考方案8】:

在 OSX 上你可以使用:

sed -i.bak '3i\
text to insert
' file

【讨论】:

以上是关于sed 插入行命令 OSX的主要内容,如果未能解决你的问题,请参考以下文章

sed在匹配行前面或者后面插入一行

sed在匹配行前面或者后面插入一行

sed 在指定行插入?

使用 sed 在匹配后插入行

sed命令在文件中替换、插入

使用 SED / VBS 将标题行插入 CSV