使用bash将内容插入模板文件

时间:2012-03-19 20:26:25

标签: bash sed

我有一个模板文件,我想要复制,然后从脚本编辑,在特定的模板点插入内容。例如,我的模板文件可能是,

...
rm -rf SomeDirectory
make install
#{INSERT-CONTENT-HERE}
do-something-else
...

在另一个脚本中,我想在循环中添加“#{INSERT-CONTENT-HERE}”的内容,即

for i in c; do
  # Write content to the template file copy at the correct point.
done

我认为sed是正确的工具,但我不太熟悉,不知道语法,手册页没有帮助。

2 个答案:

答案 0 :(得分:1)

一个例子:

echo "Line #{INSERT-CONTENT-HERE}" | sed 's/#{INSERT-CONTENT-HERE}/---/'

修改文件:

sed -i 's/#{INSERT-CONTENT-HERE}/---#{INSERT-CONTENT-HERE}/' filename

其中-i表示就地编辑,因此请注意

如果你这样做:

sed -i.bak 's/#{INSERT-CONTENT-HERE}/---/' filename

它应该将原始版本备份为filename.bak

还要在每一行进行多次替换,使用g标志:

sed -i.bak 's/#{INSERT-CONTENT-HERE}/---/g' filename

答案 1 :(得分:1)

您可以将所有命令的输出复制到临时文件中,然后将整个文件的内容复制到模板文件中:

TEMPFILE=`mktemp` && (
  for i in c
    echo "SomeTextBasedOn $i" >> $TEMPFILE
  done
  sed -i '/{INSERT-CONTENT-HERE}/r '$TEMPFILE targetfile
  rm $TEMPFILE
)