[AWK] Remplacement particulier de caractères

marco -  
jipicy Messages postés 41342 Statut Modérateur -
Bonjour!
Merci encore de lire mon post
Mon problème :

J'ai une liste de lignes variables de la forme suivante :
...
nomdemachine (IP) MAC (WW Pcba Test)
IP MAC (Western Digital)
IP MAC (Western Digital)
IP MAC (3com)
...

Cette liste est relative au résultat d'un nmap.
Le problème vient du fait que le caractère séparateur est [ESPACE] car on le retrouve dans les types de matériel (ex: Western[ESPACE]Digital). Ce qui fait que lorsque je veux travailler avec awk ou sed sur cette liste, et bien le numéro du champ correspondant au type de materiel varie! exemple : sur la ligne 1 de mon exemple ci dessus, le type de machine correspond à $4, $5 et $6, alors que sur la ligne 2 il correspond à $3 et $4, et sur la ligne 4 il correspond à $3...
Egalement il est impossible d'utiliser les parentheses pour récupérer le type de materiel car il arrive que dans certaines lignes l'IP soit entourée aussi de parentheses...
Bref, je suis dans une impasse. J'ai essayé des commandes sed et awk mais je ne vois pas comment faire...
Par exemple j'ai essayé
s/([a-z]* [a-z]*.*)/([a-z]*_[a-z]*)/

mais cela remplace le type de machine par ([a-z]*_[a-z]*) (logique)

j'ai essayé également en sed
/([a-z]* [a-z]*.*)/{
s/ /_/
}

mais tous les [ESPACE] sont converti en '_' (logique aussi)...

Y a t il un moyen de n'appliquer un changement de caractere que dans une sous chaine définié par un expression régulière?

Pour être plus concret, par rapport à l'exemple ci-dessus, je souhaite arriver au résultat final suivant :

...
nomdemachine (IP) MAC (WW_Pcba_Test)
IP MAC (Western_Digital)
IP MAC (Western_Digital)
IP MAC (3com)
...


sachant que dans le type de machine, il peut y avoir 0, 1 ou n caractères [ESPACE].

Merci beaucoup de votre aide, cela fait 3 jours non-stop que je bosse dessus et ça devient très dur!!

bonne journée
A voir également:

1 réponse

jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

Et si t'essayais tout simplement ça :
awk -F "(" '{ print "("$NF }'
Un exemple à partir de ton fichier :
[jp@Mandrake tmpfs]$ cat fich.txt
nomdemachine (IP) MAC (WW Pcba Test)
IP MAC (Western Digital)
IP MAC (Western Digital)
IP MAC (3com)

[jp@Mandrake tmpfs]$ awk -F "(" '{ print "("$NF }' < fich.txt
(WW Pcba Test)
(Western Digital)
(Western Digital)
(3com)

[jp@Mandrake tmpfs]$
;-)
0