Regex sed插入行命令OSX

Regex sed插入行命令OSX,regex,macos,sed,insert,Regex,Macos,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,这就是为什么我有一个空的“”作为扩展名 谢谢 在OSX上,您可以使用: sed -i.bak '

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

sed -i '' "3i\ text to insert" file
但是,当我使用此选项时,会出现一个错误:

sed: 1: "3i\ text to insert": extra characters after \ at the end of i command
我似乎不知道是什么引起了这个问题。我正在使用OSX,这就是为什么我有一个空的“”作为扩展名

谢谢

在OSX上,您可以使用:

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

您应该在
\
后面直接添加一个换行符:

sed '3i\
text to insert' file
这实际上是由定义的行为。GNU sed允许您指定要插入到同一行的文本,这是一个扩展


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

sed "3i\\
text to insert" file
这是因为shell首先处理双引号字符串,然后删除后跟换行符的
\

$ echo "abc\
def"
abcdef

下面是如何用一行语法完成的

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

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

    • 这对我很有用

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

      如果要修改特定文件类型的文件(在本例中为(.sh),请使用此命令

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

      确保斜杠(“\”)后有换行符,OSX使用ANSI-C引用的一行代码:

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

      改编自

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

      sed -i '' '3i\<br>
      New line to be inserted.\<br>
      ' file
      
      sed-i''3i\
      要插入的新行。\
      "档案"
      我想再加一个+1,指出“在
      3i
      位后插入的文本”是GNU扩展(但我只能给出其中一个)。@JonathanLeffler我将代表您授予他另一个+1:-)我相信这种方法可以在任意两行n和n+1之间添加一行。但是,在尝试对第一行执行此操作时,您会遇到中所述的问题