2016-06-18 63 views
0

开始@在XML文件中我有不同的XML文件在以下目录/opt/app/rty/servers/tr/current/ops/config如何找到字符串通过UNIX

比方说,有一个名为

abc.xml 
bv.xml 
ert.xml 

现在这些XML里面三个文件可以有很多的标签,像下面

<bean id="sdrt" class="com.interfaces.send.erty">     
    <property name="eprocDependentOnClientAddress"><value>@[email protected]</value></property> 
    <property name="eprocDependentOnClientAddressEod"><value>tyu</value></property>     
</bean> 

所示。现在我的目标是,目录/ opt /应用/ RTY /服务器/ TR /电流/ OPS /配置里面我需要在搜索所有的XML文件,必须找到在上下文属性标记每个XML应该是没有价值从@标签开始,还与@标签结束

比方说,比如在上面的XML文件下面是正确的

<property name="eprocDependentOnClientAddressEod"><value>tyu</value></property> 

但低于不正确

<property name="eprocDependentOnClientAddress"><value>@[email protected]</value></property> 

所以请指教一下将在UNIX命令来搜索文件名是在有开始与@财产标签内标签的XML

回答

1

要查找的文件在内容<value>@@</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" 
    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 
+0

非常感谢也请提醒,如上图所示,即@开头必须有标签作为和@标签后会有标记为,所以我们可以修改脚本,按也 –

+0

编辑的代码之前以更符合要求。希望这可以帮助。 – syadav

+0

上面的脚本中的一个变化应该是它应该将目录位置作为输入,请告知如何使用这个 –