Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Autres systèmes > Unix > AIX

AIX Forum d'entraide sur le système AIX. Avant de poster -> FAQ AIX et cours AIX

Réponse
 
Outils de la discussion
Vieux 01/08/2008, 20h42   #1 (permalink)
Invité régulier
 
Date d'inscription: juin 2008
Localisation: Ile de France
Messages: 10
Par défaut Comment changer une chaine de caractères et une seule ?

Bonjour,

On vient de me poser une colle et séche dessus depuis 2 heures

Voilà le problème, on souhaite manipuler dans un shell (en ksh) un fichier succeptible de contenir X occurences d'une chaine de caractères dans chaque enregistrement mais on souhaite ne modifier que la première que l'on rencontre sans toucher aux autres qui suivront.

La commande sed semblait toute indiquée mais voilà elle modifie une ocurrence dans chaque enregistrement et là c'est pas bon du tout....

Je suis aller voir si awk pouvait m'aider mais là non plus je ne vois rien qui fait mon bonheur

Y-a-t-il une commande qui saurait voir le fichier non pas comme une suite d'enregistrements mais comme un bloc unique à traiter ?

Merci d'avance
Missha est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/08/2008, 11h51   #2 (permalink)
Futur Membre du Club
 
Date d'inscription: juillet 2007
Messages: 35
Par défaut

J'ai une ruse : tu appelles le support IBM, et tu leurs dis que dans la man page de sed il est écrit :

Code :
"s/pattern/replacement/flags
            Substitutes the replacement string for the first occurrence of the
            pattern parameter in the pattern space. Any character that is

            displayed after the s subcommand can substitute for the / (slash)
            separator except for the space or new-line character.

            See the "Pattern Matching" section of the ed command.

            The value of the flags variable must be zero or more of:
              g
                   Substitutes all non-overlapping instances of the pattern
                   parameter rather than just the first one.
              n
                   Substitutes for the n-th occurrence only of the pattern
                   parameter.
"
Ce qui veut dire que sed 's/mot1/mot2' ou sed 's/mot1/mot2/1' ne devrait remplacer qu'une seule occurence de mot1 par mot2, et pourtant c'est tout le fichier qui est affecté. D'où bug. D'où à eux de te dire comment le corriger ou le faire marcher, et toc
letis est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/08/2008, 12h00   #3 (permalink)
Membre chevronné
 
Date d'inscription: juin 2008
Messages: 643
Par défaut sed '0,/chaine/s//new/' fichier

devrait fonctionner
- W
PS: Pourquoi AIX?
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 25/08/2008, 17h47   #4 (permalink)
Invité régulier
 
Date d'inscription: juin 2008
Localisation: Ile de France
Messages: 10
Par défaut

LOL, je reviens de vacances et j'ai adoré ta réponse Letis, dès que j'ai le temps j'essaie d'appeler IBM et promis je donne leur réponse s'ils ont une solution

Pourquoi AIX ??? bah, parce que j'ai ce problème sur un système en AIX 5.3.3 tout simplement ....
Missha est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 25/08/2008, 18h07   #5 (permalink)
Membre chevronné
 
Date d'inscription: juin 2008
Messages: 643
Par défaut

Citation:
Pourquoi AIX ??? bah, parce que j'ai ce problème sur un système en AIX 5.3.3 tout simplement ....
Ma question était motivée par la mention dans votre post de KSH, SED, AWK... pour effectuer une opération dans laquelle AIX n'est, "à priori" pas très concerné - vous pourriez avoir le même soucis sur n'importe quel Linux, Solaris, ou encore cygwin/mingw
- W
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 25/08/2008, 18h31   #6 (permalink)
Invité régulier
 
Date d'inscription: juin 2008
Localisation: Ile de France
Messages: 10
Par défaut

Je viens de tester votre formule magique wizstricks mais elle n'a aucun effet :

# sed '0,/123/s//XXXXXXXX/' z
toto blabalabla mdldmd123 &"('123 1234 &22345 totototo toto
toto blabalabla mdldmd123 &"('123 1234 &22345 totototo toto
toto blabalabla mdldmd123 &"('123 1234 &22345 totototo toto

La mienne au moins changeait la 1 ere occurence sur chaque ligne ...

#sed 's/123/XXXXXXXX/1' z
toto blabalabla mdldmdXXXXXXXX &"('123 1234 &22345 totototo toto
toto blabalabla mdldmdXXXXXXXX &"('123 1234 &22345 totototo toto
toto blabalabla mdldmdXXXXXXXX &"('123 1234 &22345 totototo toto

Aurais-je mal compris votre syntaxe ?
Missha est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 25/08/2008, 19h21   #7 (permalink)
Membre chevronné
 
Date d'inscription: juin 2008
Messages: 643
Par défaut

J'utilise GNU sed version 4.1.5 (sur Ubuntu)

sur le fichier, contenant:
Code :
! cat toto.txt
aba 123 abc 456 xxx
789 zzz 123 yz 23 jksdg 
sdh 123 789 ss
la commande:
Code :
! sed '0,/123/s//zzzz/' toto.txt
aba zzzz abc 456 xxx
789 zzz 123 yz 23 jksdg 
sdh 123 789 ss
remplace bien le premier 123 par zzzz

C'est peut être maintenant qu'AIX peut être interressant.
- W
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 25/08/2008, 19h55   #8 (permalink)
Invité régulier
 
Date d'inscription: juin 2008
Localisation: Ile de France
Messages: 10
Par défaut

Malheureusement pour moi, nos systémes n'ont pas GNU d'installé (pour l'instant refus de s'interesser à Linux et autres produits pas cher du marché, nos têtes pensantes aiment mieux faire une coupe franche dans le petit personnel plutôt que de baisser le prix des factures de maintenance logiciel.... faut bien expliquer qu'on a trop de frais ).

Sinon, oui, c'est tout à fait cela que j'aurai voulu obtenir... Dommage
Missha est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Autres systèmes > Unix > AIX



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide