2010-01-21 39 views
1

什麼是檢查(從腳本命令行)的最佳解決方案,如果某個XML文件中有這樣一行:寫一個cmd行腳本解析XML文件

<endpoint uri="endpoint.php" class="flex.messaging.endpoints.AMFEndpoint"/> 

或這條線

<!-- <endpoint uri="endpoint.php" class="flex.messaging.endpoints.AMFEndpoint"/> --> 

如果找到第二個(註釋掉),停止執行?

THX, 馬丁

回答

0

假設模式發生在單行

#!/bin/bash 
awk ' 
/<endpoint uri=.*endpoint.php.*class.*flex.messaging.endpoints.AMFEndpoint/ && /<!--/{ 
    exit 
} 
/<endpoint uri=.*endpoint.php.*class.*flex.messaging.endpoints.AMFEndpoint/{ 
    # to execute external script inside awk, uncomment below 
    #cmd = "myscript.sh" 
    #system(cmd) 
} 
' file 

或者你可以返回一個代碼回殼

#!/bin/bash 
var=$(awk ' 
/<endpoint uri=.*endpoint.php.*class.*flex.messaging.endpoints.AMFEndpoint/ && /<!--/{ 
    print 1 
} 
/<endpoint uri=.*endpoint.php.*class.*flex.messaging.endpoints.AMFEndpoint/{ 
    print 0 
} 
' file) 
[ "$var" -eq 1 ] && exit 
[ "$var" -eq 0 ] && ./myscript.sh 
+0

這些都不是完全可靠的。一個叫 2010-01-21 11:04:41

+0

其OP的樣本,不是我的。如果端點中存在「s」的可能性,那麼完全匹配它就可以。 – ghostdog74 2010-01-21 11:21:08

+0

這看起來不錯!如何檢查就足夠了。我試圖在第二種情況下執行一個腳本... 只是在那裏放一個命令對我不起作用 (./doSomething.sh) 我需要使用exec()嗎? – martin 2010-01-21 11:41:14

4

單線或跨多個行?如果是前者,則可以使用grep

更新:似乎有像xgrepxmltwigxmlstarlet一些XML意識到變種。

+0

+1 xmlstarlet – 2010-01-21 11:22:05