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的主要内容,如果未能解决你的问题,请参考以下文章