sed insert line命令OSX

时间:2014-09-02 20:39:04

标签: macos bash sed insert

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

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

但是当我使用它时,我收到一个错误:

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

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

谢谢!

7 个答案:

答案 0 :(得分:26)

您应该在\之后直接添加换行符:

sed '3i\
text to insert' file

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


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

sed "3i\\
text to insert" file

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

$ echo "abc\
def"
abcdef

答案 1 :(得分:11)

在OSX上,您可以使用:

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

答案 2 :(得分:3)

以下是一行语法

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

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

答案 3 :(得分:1)

这对我有用

'django.contrib.auth',
'rest_auth',
'allauth',
'allauth.account',
'allauth.socialaccount',
'rest_auth.registration',

答案 4 :(得分:0)

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

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

确保在斜线(“\”)

之后有换行符

答案 5 :(得分:0)

使用ANSI-C引号的OSX单线版:

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

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

答案 6 :(得分:0)

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

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