Bash 使用sed将shell变量插入文件开头时出错
我想在文件的开头附加bash变量(它有html标记)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.
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\nsdfdsf '
。然后,您可以使用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\nsdfdsf ;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.