2010-05-13 13 views
1

Je suis confondu avec une partie simple apparente de sed - the ou instruction. J'ai écrit ce qui suit sed qui analyse un fichier d'événements avec de multiples événements encapsulées entre les balises d'événement et puis imprime la sortie de chaque événement sur 1 ligne:Utilisation ou en remplacement multiligne sed

machinename:~$ sed -n "/<event/,/<\/event>/ {/<result/{s/.*result value=\" \(.*\)\"\/>.*/\1/g; p}; /<sender/ {s/.*phoneNo=\"\(.*\)\" country.*/\1/g; p}}" xmlEventLog_2010-02-05T16:40:55.xml | sed '/Allowed/{N;s/\n/ /;}' 
Allowed +989350000100 
Allowed +989350000209 
Allowed +989350000002 
Allowed +989350000002 
Allowed +989350000100 
Allowed +989350000209 
Allowed +989350000002 
Allowed +989350000002 
machinename:~$ 

De ce qui précède, il y a 8 événements dans le journal tous avec le résultat Permis. Maintenant, le problème est qu'il pourrait y avoir plus d'une valeur de résultat. Les valeurs de résultat peuvent être bloquées modifiées ou autorisées. Je pensais que (Bloqué | modification | autorisés) dans la deuxième sed traiterait cela, mais je suis la sortie suivante:

machinename:~$ sed -n "/<event/,/<\/event>/{/<result/{s/.*result value=\"\(.*\)\"\/>.*/\1/g; p}; /<sender/ {s/.*phoneNo=\"\(.*\)\" country.*/\1/g; p}}" xmlEventLog_2010-02-05T16:40:55.xml | sed '/(Allowed|Blocked|Modified)/{N;s/\n/ /;}' 
Allowed 
+989350000100 
Allowed 
+989350000209 
Allowed 
+989350000002 
Allowed 
+989350000002 
Allowed 
+989350000100 
Allowed 
+989350000209 
Allowed 
+989350000002 
Allowed 
+989350000002 
machinename:~$ 

Alors qu'est-ce que je manque? pourquoi le ou dans la finale sed arrêter le remplacement de la nouvelle ligne?

Merci à l'avance

A

Répondre

2

Vous voulez écrire

sed '/\(Allowed\|Blocked\|Modified\)/{N;s/\n/ /;}'

:)

+0

merci. parfois une autre paire d'yeux peut voir l'évidence – amadain