2010-07-29 4 views
1

J'ai un fichier qui est juste une ligne (une ligne HUGE) à analyser. Je veux analyser la valeur qui apparaît entre "code d'erreur indéfini" et "id" sur cette ligne. La chose est que cela apparaît plusieurs fois sur la même ligne avec des valeurs différentes partout. Le code suivant ne me donne que la dernière instance.analyse de plusieurs valeurs à partir d'un fichier

cat bad_events_P2J3.xml | sed -n 's/.*Undefined error code (\(.*\))\" id.*/\1\n/p' 

Comment puis-je obtenir toutes les instances de ceci?

+0

Pourquoi ne pas remplacer "id". avec "\ n"? Ensuite, chaque enregistrement est sur une ligne. – Demosthenex

Répondre

1

Vous étiez sur la bonne voie:

sed -n 's/.*Undefined error code\(.*\)id.*/\1/p' bad_events_P2J3.xml 

Notez que cat est inutile et, à moins que vous avez besoin d'un saut de ligne supplémentaire, sed fournira pour vous.

J'ai manqué le fait que cela apparaisse plusieurs fois dans votre fichier. Cela devrait fonctionner dans ce cas:

grep -Po 'Undefined error code.*?id' bad_events_P2J3.xml | sed 's/^Undefined error code//;s/id$//' 
+0

alors le chat a causé le problème? Je pensais que je devrais être capable de le faire avec sed. Je ne voyais pas le bois pour les arbres. Merci – amadain

+0

@amadain: Non, 'cat' n'était pas le problème. Cela n'était simplement pas nécessaire puisque 'sed' accepte un nom de fichier comme argument et vous n'êtes pas en train de charger plusieurs fichiers. Le problème était probablement l'ensemble supplémentaire de parenthèses. Sans voir une partie des données réelles, il est difficile d'être sûr. –

+0

@OP, cela fonctionne seulement est vous êtes sûr que vous avez 1 instance de ces paire de mots.Il obtiendra seulement la dernière instance est il y a plus parce que sed est gourmand. – ghostdog74

1
$ cat file 
text1 text2 Undefined error code text3 text4 id text5 text6 Undefined error code txt7 txt8 id 
$ awk -vRS="id" '{gsub(/.*Undefined error code/,"")}1' file 
text3 text4 
txt7 txt8 
+0

merveilleux. Je ne pouvais pas trouver comment faire ça n'importe où. Il semble que ce serait une chose facile que vous pourriez faire avec sed simple, mais c'est beaucoup plus difficile quand vous l'abordez. Ce code était parfait. Merci – amadain

Questions connexes