使用shell脚本替换与更新文件里的一段内容,可以使用sed, awk等Linux工具

我有个test.xml文件,里面有一大段文字<abcdef>kkkkkkkadsf......</abcdef>现在需要把这两个<>之间的内容替换掉。给定两个变量$hos... 我有个test.xml文件,里面有一大段文字
<abcdef>
kkkk
kkk
adsf
...
...

</abcdef>
现在需要把这两个<>之间的内容替换掉。

给定两个变量 $hostnames="host1,host2,host3..."
$paragraph="many_strings" (多行文字)
找到<abcdef>与</abcdef>之间的内容删除,然后把以下内容添加进去

for hname in $hostnames
do

insert $hname

insert $paragraph

done

请教该如何实现?谢谢!~
展开
 我来答
百度网友5311d79
推荐于2016-07-20 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3219万
展开全部

我也给个思路吧 —— 用sed根据地址范围截取文件内容,用Here documents方法添加新的多行内容,然后重组文件。具体步骤如下:

1)截取test.xml文件起始行到<abcdef>行,保存到tmp文件;

2)将要添加的内容根据变量值展开,附加写入tmp文件;

3)截取test.xml文件</abcdef>行到结束行,附加写入tmp文件。

4)移动tmp文件覆盖test.xml文件。

 

代码:

#!/bin/sh
$hostnames="host1,host2,host3 ..."
$paragraph="many_strings"
sed -n '1,/^<abcdef>/p' test.xml >tmp
cat <<EOF >>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必需顶格写,前面不能有空格。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式