使用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,这应该足以满足您的需要(这里的文件名是模板)。您不需要转义替换文本(我猜主要是这样)。请看第二个示例,只要添加了内容,就可以移动标记。