Bash 使用sed将shell变量插入文件开头时出错

Bash 使用sed将shell变量插入文件开头时出错,bash,shell,unix,Bash,Shell,Unix,我想在文件的开头附加bash变量(它有html标记) INSERTTO=<h2>title</h2> <li>sdfdsf</li> 但我得到了一个错误- sed: -e expression #1, char 177: unknown command: `<' sed:-e表达式#1,char 177:未知命令:`首先,使用引号: INSERTTO='title sdfdsf“ 然后试试这个: sed“1i$INSERTTO”file.

我想在文件的开头附加bash变量(它有html标记)

INSERTTO=<h2>title</h2>
<li>sdfdsf</li>
但我得到了一个错误-

sed: -e expression #1, char 177: unknown command: `<'
sed:-e表达式#1,char 177:未知命令:`首先,使用引号:
INSERTTO='title
  • sdfdsf
  • 然后试试这个:


    sed“1i$INSERTTO”file.html

    从文件中的一些文本开始,例如

    $ cat file
    some text
    
    $ INSERTTO='<h2>title</h2>\n<li>sdfdsf</li>'; sed "1i $INSERTTO" file
    <h2>title</h2>
    <li>sdfdsf</li>
    some text
    
    然后,您需要变量在换行符所在的位置包含一个显式的
    '\n'
    字符,例如
    INSERTTO='title\n
  • sdfdsf
  • '
    。然后,您可以使用
    sed
    表达式将两行作为文件中的起始行,例如

    $ cat file
    some text
    
    $ INSERTTO='<h2>title</h2>\n<li>sdfdsf</li>'; sed "1i $INSERTTO" file
    <h2>title</h2>
    <li>sdfdsf</li>
    some text
    
    $INSERTTO='title\n
  • sdfdsf
  • ;sed“1i$INSERTTO”文件 标题
  • sdfdsf
  • 一些文本
    现在,将要做的事情只会写入终端
    stdout
    。若要就地修改文件,您需要为
    sed
    (或
    -i.bak
    添加
    -i
    选项,以使用
    .bak
    扩展名保存原始文件的备份。(无论您如何选择)

    我为您提供了一个
    ed(1)
    解决方案

    INSERTTO=<h2>title</h2>
    <li>sdfdsf</li>
    
    printf '%s\n' 1i "$INSERTTO" . w | ed -s file.html
    
    添加
    stdin
    标志并使用
    herestring
    在bash中工作,但在POSIX shell中不工作

    cat - file.html <<< "$INSERTTO" 
    
    • tempfile
      只是一个例子,你应该在这里拿一个战利品
    cat - file.html <<< "$INSERTTO"  > tempfile && mv tempfile file.html
    
    cat - file.html <<< "$INSERTTO"  > tempfile && cat tempfile > file.html && rm tempfile.