繁体   English   中英

sed 插入行命令 OSX

[英]sed insert line command OSX

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

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

但是,当我使用它时,出现错误:

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

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

谢谢!

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

sed '3i\
text to insert' file

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


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

sed "3i\\
text to insert" file

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

$ echo "abc\
def"
abcdef

在 OSX 上,您可以使用:

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

以下是如何用一行语法做到这一点

sed -i '' -e "2s/^//p; 2s/^.*/text to insert/" file
  • 重复第二行: 2s/^//p;

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

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

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

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

这对我有用

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM