2016-06-18 99 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

上面的腳本中的一個變化應該是它應該將目錄位置作爲輸入,請告知如何使用這個 –