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

使用bash将内容插入模板文件,bash,sed,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 corr

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

...
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
是正确的工具,但我不太熟悉语法,手册页也帮不上忙。

示例:

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

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

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

谢谢你的更新,祝你好运。你还有问题吗?对于那些IQDC(推断问题辨别挑战综合征)患者,问题是,“做这件事的正确命令是什么?”?暗指的?红外线?:-)您在for循环中迭代的是什么?要替换的内容?模板的其他副本?@eljunior:现在,它是一系列基于一组文件的RPM规范文件命令。循环获取满足特定要求的特定目录中的文件名,应用一些转换逻辑,并构建string命令。该命令需要插入到模板中,每个文件插入一次。是我弄错了,还是这只会让我通过循环的第一次迭代?(之后标记消失了。)此外,如果可能的话,我不想让regex转义替换文本。这在您的解决方案中是必要的吗?@DaveMateer,这应该足以满足您的需要(这里的文件名是模板)。您不需要转义替换文本(我猜主要是这样)。请看第二个示例,只要添加了内容,就可以移动标记。