如何通过unix在xml文件中找到以@开头的字符串

时间:2016-06-18 16:50:39

标签: unix

我在以下目录/opt/app/rty/servers/tr/current/ops/config

中有不同的xml文件

假设有三个名为

的文件
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中的文件名,其中有一个标签以@开头的属性标签

1 个答案:

答案 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