我在以下目录/opt/app/rty/servers/tr/current/ops/config
假设有三个名为
的文件abc.xml
bv.xml
ert.xml
现在在这些xml中可以有很多标签,如下所示
<bean id="sdrt" class="com.interfaces.send.erty">
<property name="eprocDependentOnClientAddress"><value>@argon.tdw.client.address@</value></property>
<property name="eprocDependentOnClientAddressEod"><value>tyu</value></property>
</bean>
现在我的目标是在目录/ opt / app / rty / servers / tr / current / ops / config中我需要搜索所有xml文件,并且必须在上下文中的每个xml中找到属性标记应该有没有值从@ tag开始,也以@ tag
结尾例如,在上面的xml文件中,以下是正确的
<property name="eprocDependentOnClientAddressEod"><value>tyu</value></property>
但下面的内容不正确
<property name="eprocDependentOnClientAddress"><value>@argon.tdw.client.address@</value></property>
所以请告知unix中的命令是什么,以搜索那些xml中的文件名,其中有一个标签以@开头的属性标签
答案 0 :(得分:1)
要查找内容中包含<value>@
和@</value>
字符串的文件,请使用此shell
#!/bin/bash
for line in `ls *.xml`; do
a=`egrep -o "<value>@"\|"@</value>" $line`
if [[ "$a" == "<value>@"* && "$a" == *"@</value>" ]]; then
printf "File $line has issues.\n"
else
printf "File $line is clean.\n"
fi
done
如果@
需要从<value>
标记内替换。
#!/bin/bash
for line in `ls *.xml`; do
a=`egrep -o "<value>@"\|"@</value>" $line`
if [[ "$a" == "<value>@"* && "$a" == *"@</value>" ]]; then
printf 'File $line has issues.\n'
sed -e 's/<value>@//g' -e 's/@<\/value>//g' $line > ${line}.replaced
fi
done