remplacer bout de code avec awk - Codes et scripts - Linux et OS Alternatifs
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 ?
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
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...)
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 : |
man tr
...
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...
Marsh Posté le 08-02-2009 à 22:51:19
Code :
|
Marsh Posté le 08-02-2009 à 23:03:20
Bonjour,
misterZidane a écrit : |
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("<.*>", "" ).
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.
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...?
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...?
Marsh Posté le 09-02-2009 à 11:31:12
Reply
Marsh Posté le 08-02-2009 à 18:08:01
Bonjour à toutes et à tous !
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 ?
Merci