用shell实现,有两个xml,其中一个名字为ResGuard.xml,一个名字为ResGuardRN.xml,要把ResGuardRN.xml中的<issue id="whitelist" isactive="true">到</issue>之间的内容合并到ResGuard.xml中的<issue id="whitelist" isactive="true">到</issue>之间,生成一个ResGuardAll.xml,如果ResGuardRN.xml没有或者没有内容,则把ResGuard.xml的内容生成到ResGuardAll.xml
时间: 2024-03-13 21:43:05 浏览: 116
可以使用以下Shell脚本实现:
```
#!/bin/bash
# 判断ResGuardRN.xml是否存在
if [ -f ResGuardRN.xml ]; then
# 提取ResGuardRN.xml中的<issue id="whitelist" isactive="true">到</issue>之间的内容
content=$(sed -n '/<issue id="whitelist" isactive="true">/,/<\/issue>/p' ResGuardRN.xml)
else
# 如果ResGuardRN.xml不存在,则将ResGuard.xml的内容赋值给content
content=$(cat ResGuard.xml)
fi
# 将ResGuard.xml中的<issue id="whitelist" isactive="true">到</issue>之间的内容替换为content
sed -i '/<issue id="whitelist" isactive="true">/,/<\/issue>/c\'"$content" ResGuard.xml
# 将ResGuard.xml复制到ResGuardAll.xml
cp ResGuard.xml ResGuardAll.xml
```
注意,在Windows系统下运行该脚本时需要将换行符从LF改为CRLF。
相关问题
用shell实现,其中一个名字为ResGuard.xml,一个名字为ResGuardRN.txt,要求如下: 1、生成一个ResGuardAll.xml,把ResGuard.xml的全部内容追加到ResGuardAll.xml文件中 2、等ResGuardAll.xml有内容后,读取ResGuardRN.txt的所有内容,追加到ResGuardAll.xml中包含<issue id="whitelist" isactive="true">所在行的后面 4、log打印出ResGuardAll.xml中包含<issue id="whitelist" isactive="true">所在行的行数 3、使用xmlstarlet对ResGuardAll.xml进行格式化处理,避免出现不规范的XML标签格式
可以使用以下shell脚本实现:
```bash
#!/bin/bash
# 生成ResGuardAll.xml,将ResGuard.xml的内容追加到其中
cat ResGuard.xml > ResGuardAll.xml
# 等待ResGuardAll.xml有内容后,读取ResGuardRN.txt的所有内容,追加到ResGuardAll.xml中包含<issue id="whitelist" isactive="true">所在行的后面
while [ ! -s ResGuardAll.xml ]
do
sleep 1
done
awk '/<issue id="whitelist" isactive="true">/{print NR}' ResGuardAll.xml | read LINE_NUMBER
sed -i "${LINE_NUMBER} r ResGuardRN.txt" ResGuardAll.xml
# log打印出ResGuardAll.xml中包含<issue id="whitelist" isactive="true">所在行的行数
echo "Line number of <issue id=\"whitelist\" isactive=\"true\"> in ResGuardAll.xml: ${LINE_NUMBER}"
# 使用xmlstarlet对ResGuardAll.xml进行格式化处理,避免出现不规范的XML标签格式
xmlstarlet fo -s 2 -L ResGuardAll.xml > ResGuardAll_formatted.xml
mv ResGuardAll_formatted.xml ResGuardAll.xml
```
这个脚本实现了以下功能:
1. 首先将ResGuard.xml中的内容追加到ResGuardAll.xml文件中;
2. 然后等待ResGuardAll.xml有内容后,读取ResGuardRN.txt的所有内容,追加到ResGuardAll.xml中包含<issue id="whitelist" isactive="true">所在行的后面;
3. 使用awk命令查找ResGuardAll.xml中包含<issue id="whitelist" isactive="true">的行数,并将结果保存到LINE_NUMBER变量中;
4. 使用sed命令将ResGuardRN.txt的内容插入到ResGuardAll.xml中对应的位置;
5. 打印出ResGuardAll.xml中包含<issue id="whitelist" isactive="true">所在行的行数;
6. 使用xmlstarlet对ResGuardAll.xml进行格式化处理,避免出现不规范的XML标签格式。
阅读全文