【问题标题】:sed insert line command OSXsed 插入行命令 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,这就是为什么我有一个空的 ' ' 作为我的扩展名。

谢谢!

【问题讨论】:

    标签: regex macos sed insert


    【解决方案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://stackoverflow.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
              

              【讨论】:

                猜你喜欢
                • 2020-06-11
                • 1970-01-01
                • 2019-01-03
                • 1970-01-01
                • 1970-01-01
                • 2014-04-26
                • 1970-01-01
                • 2018-11-24
                相关资源
                最近更新 更多