我也给个思路吧 —— 用sed根据地址范围截取文件内容,用Here documents方法添加新的多行内容,然后重组文件。具体步骤如下:
1)截取test.xml文件起始行到
2)将要添加的内容根据变量值展开,附加写入tmp文件;
3)截取test.xml文件行到结束行,附加写入tmp文件。
4)移动tmp文件覆盖test.xml文件。
代码:
#!/bin/sh
$hostnames="host1,host2,host3 ..."
$paragraph="many_strings"
sed -n '1,/^/p' test.xml >tmp
cat <>tmp
for hname in `echo "$hostnames" | tr ',' ' '`
do
insert $hname
insert $paragraph
done
EOF
sed -n '/^<\/abcdef>/,$p' test.xml >>tmp
mv tmp test.xml
注意:
1) for a in b 结构中,b集合里的内容必需要空格分隔。所以我这里做了转换,用tr命令将逗号分隔改为了空格分隔。
2)第二个EOF必需顶格写,前面不能有空格。