Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1614 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  remplacer bout de code avec awk

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

remplacer bout de code avec awk

n°1111271
misterZida​ne
Posté le 08-02-2009 à 18:08:01  profilanswer
 

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

mood
Publicité
Posté le 08-02-2009 à 18:08:01  profilanswer
 

n°1111274
Taz
bisounours-codeur
Posté le 08-02-2009 à 18:22:33  profilanswer
 

tr -d

n°1111275
misterZida​ne
Posté le 08-02-2009 à 18:34:10  profilanswer
 

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 ?

n°1111278
ogaby
Posté le 08-02-2009 à 18:56:55  profilanswer
 

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

n°1111288
misterZida​ne
Posté le 08-02-2009 à 19:41:43  profilanswer
 

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...)

n°1111294
Taz
bisounours-codeur
Posté le 08-02-2009 à 20:23:41  profilanswer
 

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
 
...

n°1111296
misterZida​ne
Posté le 08-02-2009 à 20:42:59  profilanswer
 

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...

n°1111322
sputnick
bip...bip...bip...bip...bi...b
Posté le 08-02-2009 à 22:51:19  profilanswer
 

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

n°1111331
ttys
Posté le 08-02-2009 à 23:03:20  profilanswer
 

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("<.*>", "" ).

n°1111335
ogaby
Posté le 08-02-2009 à 23:16:33  profilanswer
 

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

mood
Publicité
Posté le 08-02-2009 à 23:16:33  profilanswer
 

n°1111394
motard75
Posté le 09-02-2009 à 11:21:26  profilanswer
 

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...?

n°1111395
motard75
Posté le 09-02-2009 à 11:23:14  profilanswer
 

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...?

n°1111398
arsunik
ma tuxitude me beastifie
Posté le 09-02-2009 à 11:31:12  profilanswer
 

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


---------------
[:arsunik]  Les tournois de badminton
n°1111416
motard75
Posté le 09-02-2009 à 12:23:18  profilanswer
 

Merci !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  remplacer bout de code avec awk

 

Sujets relatifs
remplacer iceape par firefox sous debian[RESOLU]Debian dist-upgrade veut me remplacer postfix par exim
Remplacer tag dans document xmlRemplacer une chaine de caractère avec sed.
Recuperer le code retour d'un cksum distantRemplacer centre reseau sur Mandriva (Wicd ???)
Remplacer une carte réseau sans utiliser ifrename.sed remplacer un caractère à une postion donnée
Linux: remplacer un retour chariot par un espace (AWK)[Sed] Remplacer les points par des espaces dans un numéro de téléphone
Plus de sujets relatifs à : remplacer bout de code avec awk


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR