[英]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
这对我有用
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.