2010-01-21 6 views
1

Quelle serait la meilleure solution pour vérifier (à partir de la ligne de commande avec un script), si un certain fichier xml contient cette ligne:Ecrire un script de ligne cmd pour analyser un fichier xml

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

ou cette ligne

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

et d'arrêter l'exécution si le second (mis en commentaire) est trouvé?

Thx, martin

Répondre

0

modèle en supposant se produit à la ligne unique

#!/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 

OU vous pouvez retourner un code de retour à bombarder

#!/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

Ce ne sont pas totalement fiables. Un nœud appelé

+0

son échantillon OP, pas le mien. S'il y a possibilité de "s" dans le point de terminaison, alors le faire correspondre exactement fera l'affaire. – ghostdog74

+0

cela semble bon! C'est suffisant comment cela est vérifié. J'essaie d'exécuter un script dans le second cas ... juste de mettre une commande là-bas ne fonctionne pas pour moi par exemple. (./doSomething.sh) dois-je utiliser exec()? – martin

4

ligne unique ou sur plusieurs lignes? Si le premier, vous pouvez utiliser grep.

Mise à jour: Il semble y avoir quelques variantes XML au courant comme xgrep, xmltwig et xmlstarlet.

+0

+1 pour xmlstarlet –

Questions connexes