一个用sed给xml的标签编号的Bash脚本

记录一下这个小脚本,试探了很久才研究出这个方法来给我的一个xml文件编号。

这个文件最初是从博客上直接复制粘贴下来的,根据其格式先对其html tag替换做好标记,然后用一句sed转换成xml的:

cat susan.txt|
sed -e 's/title/(.*/)$/<//content>/r/n<//blog>/r/n<blog>/r/n<title>/1<//title>/'|
sed -e 's/timestamp/(.*/)/<timestamp>/1<//timestamp>/r/n<content>/'|
sed -e 's/[ ]+/  /' > susanfmt.xml

当然,还要稍作调整。

但接着我需要对博客进行编号,即每一个<blog>我都需要变成<blog id="编号">,sed自己是干不了了,所以结合一点Bash:

declare -i j=1

for ((i=$(cat susanfmt.xml|tee susanalt.xml|wc -l);i>=1;i--))
do
sed
-i -e "$i""s/<blog>/<blog id==/"$i/">/" susanalt.xml
grep "<blog id==/"$i/">" susanalt.xml
if [ $? -eq 0 ]
then
sed
-i -e "$i""s/<blog id==/"$i/">/<blog id=/"$j/">/" susanalt.xml
j
=$j+1
fi
done


以上,先将目的文档susanfmt.xml复制到susanalt.xml,同时计算出行数。从最后一行到第一行,先将遇到的<blog>替换成<blog id=="该行行数">,注意多了一个=号,这是防止与最终结果相冲突。这明显不是我们要的,用grep的返回值确认的确做了一次替换后,将id=="行数"改成id="编号"。有点怪异,而且重复工作也多,效率较低,但是这是目前唯一想到的办法。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值