[AWK] Remplacement particulier de caractères

Fermé
marco - 8 juin 2005 à 10:25
jipicy
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
- 8 juin 2005 à 13:42
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

1 réponse

jipicy
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
8 juin 2005 à 13:42
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