remplacer bout de code avec awk

remplacer bout de code avec awk - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 08-02-2009 à 18:08:01    

Bonjour à toutes et à tous !  :hello:  
J'écris un script qui modifie un fichier texte (l'objectif est de suprimer les chaines de caractere entre "<" et ">" :
 
Fichier.txt contient :
toto <le plus fort>
titi <le moins fort> numéro 2
tutu
 
Mon script est le suivant :
 
cat Fichier.txt | awk '{
gsub("<*>","",$0); print }'
 
Mon script est cencé supprimer les chaînes de caractères entre "<" et ">" mais je ne sais pas comment faire car ' gsub("<*>","",$0); ' ne marche pas... :??:  
 
Auriez-vous une idée pour faire ça ? :sarcastic:  
Merci

Reply

Marsh Posté le 08-02-2009 à 18:08:01   

Reply

Marsh Posté le 08-02-2009 à 18:22:33    

tr -d

Reply

Marsh Posté le 08-02-2009 à 18:34:10    

Merci d'avoir répondu Taz. Je ne connaissais pas cette commande, mais après quelques recherche sur le Net, j'ai trouvé ceci :
"La commande tr permet de convertir une chaîne de caractère en une autre de taille égale."
 
Or ce n'est pas ce que je voudrais. L'objectif est de supprimer ce qui est entre "<" et ">". Pourrais-tu me donner plus de précision stp ?

Reply

Marsh Posté le 08-02-2009 à 18:56:55    

tr change un caractère, gsub une chaine...
 
Avec awk -F'<' ,tu définis < comme séparateur.
Essaye
awk -F'<' '{print $1}' Fichier.txt

Reply

Marsh Posté le 08-02-2009 à 19:41:43    

Merci pour ta réponse ogaby mais je ne peux pas utiliser '<' comme séparateur car la chaine de caractere qui doit être supprimer est comprise entre '<' et '>'. Peux-t-on utiliser les expressions regulieres avec gsub ? (car je n'y arrive pas...)

Reply

Marsh Posté le 08-02-2009 à 20:23:41    

misterZidane a écrit :

Merci d'avoir répondu Taz. Je ne connaissais pas cette commande, mais après quelques recherche sur le Net, j'ai trouvé ceci :
"La commande tr permet de convertir une chaîne de caractère en une autre de taille égale."
 
Or ce n'est pas ce que je voudrais. L'objectif est de supprimer ce qui est entre "<" et ">". Pourrais-tu me donner plus de précision stp ?


man tr
 
...

Reply

Marsh Posté le 08-02-2009 à 20:42:59    

Taz, avec la commande tr, si je fais :
echo "toto <le plus grand> est fort" | tr -d "<*>"  
 
Cela m'affiche "toto le plus grand est fort". Or j'aurais voulu :
"toto est fort"
 
On ne peut pas faire ça avec tr à ma connaissance...

Reply

Marsh Posté le 08-02-2009 à 22:51:19    

Code :
  1. $ cat>/tmp/l
  2. toto <le plus fort>
  3. titi <le moins fort> numéro 2
  4. tutu
  5. $ sed 's/<.*>//' /tmp/l
  6. toto
  7. titi  numéro 2
  8. tutu

Reply

Marsh Posté le 08-02-2009 à 23:03:20    

Bonjour,

misterZidane a écrit :


Mon script est cencé supprimer les chaînes de caractères entre "<" et ">" mais je ne sais pas comment faire car ' gsub("<*>","",$0); ' ne marche pas... :??:  


Tu n'es pas loin, c'est gsub("<.*>", "", $0) qu'il fallait mettre (c'est « .* » et non « * » l'expression régulière pour « n'importe quelle suite de caractères), et on peut se passer du troisième argument, ce qui donne gsub("<.*>", "" ).

Reply

Marsh Posté le 08-02-2009 à 23:16:33    

Tiens j'ai appris 2 trucs en 2 posts.
 
Merci à sputnick pour sed et merci à ttys pour gsub.
 
:jap:

Reply

Marsh Posté le 08-02-2009 à 23:16:33   

Reply

Marsh Posté le 09-02-2009 à 11:21:26    

Salut à vous.
Par contre en faisant :
echo "toto <le plus grand> est plus fort <que toi> en fait" | awk '{gsub(".*","" ); print $0}' renvoi :
 
"toto  en fait" et non :
"toto est plus fort en fait"... Savez-vous si c'est possible avec gsub de faire ça...?

Reply

Marsh Posté le 09-02-2009 à 11:23:14    

erratum :
 
Salut à vous.
Par contre en faisant :
echo "toto <le plus grand> est plus fort <que toi> en fait" | awk '{gsub("<.*>","" ); print $0}' renvoi :
 
"toto  en fait" et non :
"toto est plus fort en fait"... Savez-vous si c'est possible avec gsub de faire ça...?

Reply

Marsh Posté le 09-02-2009 à 11:31:12    

En remplacant "<.*>" par "<[^>]*>".


---------------
[:arsunik]  Les tournois de badminton
Reply

Marsh Posté le 09-02-2009 à 12:23:18    

Merci !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed