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

来源:互联网 发布:阿里云 解析 怎么用 编辑:程序博客网 时间:2024/05/22 03:31
记录一下这个小脚本,试探了很久才研究出这个方法来给我的一个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="编号"。有点怪异,而且重复工作也多,效率较低,但是这是目前唯一想到的办法。
原创粉丝点击