Substitution de chaine de caractère à l'aide de sed

Substitution de chaine de caractère à l'aide de sed - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 02-03-2009 à 16:43:22    

Bonjour,
 
Je souhaite faire une substitution de chaine de caractères à l'aide de la commande SED.
Je suis sous HPUX.
 
Voici un exemple de ma chaine de départ :  
aaaaaa;rrrr;ggggg;tttt;"erererere;ererere";rororororo
 
Je voudrais pouvoir remplacer à l’aide de la commande sed et d'expressions régulières le ';' entre double quote par un '_' par exemple.
 
Le ';'à remplacer se trouve toujours entre double quote, je dois uniquement remplacer celui la car les autres servent à délimiter des champs.
L’utilisation de sed est privilégiée car cela permet de l’intégrer à un programme shell.
 
Ainsi ma chaine d’arrivé après substitution doit ressembler à cela :  
aaaaaa;rrrr;ggggg;tttt;"erererere_ererere";rororororo
 
Merci d'avance pour ceux qui peuvent m'aider.


Message édité par ismaoul le 02-03-2009 à 16:47:31
Reply

Marsh Posté le 02-03-2009 à 16:43:22   

Reply

Marsh Posté le 02-03-2009 à 17:31:38    

s/"([^"]*);([^"]*)"/"\1_\2"/
de tête, faut peut être mettre des \ devant les parenthèses et ça t'enlèvera qu'un ; par bloc entre guillements, faut l'adapter si tu veux que ça en remplace plusieurs
 
si t'as jamais fait de regexp :
entre parenthèse ça sert à récupérer un bloc (qui sera replacé avec \1,\2, etc.)
[^"] ça veut dire n'importe quel caractère sauf "
* ça veut dire 0 ou n occurences


---------------
"The pen is mightier than the sword if the sword is very short, and the pen is very sharp." TP. Mes Jeux. Mes Ventes. Groupe HFR sur PlayFire.
Reply

Marsh Posté le 03-03-2009 à 09:15:32    

Merci pour votre réponse,  
 
Malheureusement lorsque j'exécute la commande j'ai un erreur.
J'ai essayé de mettre des "\" devant les parenthèses comme vous le suggérer mais cela ne fonctionne pas non plus.
 
Si jamais quelqu'un d'autre à une idée je suis preneur.  :)  
 
Merci

Reply

Marsh Posté le 03-03-2009 à 10:19:38    

Bonjour,
 
Rajoute des "\" devant les parenthèses :
# sed 's/"\([^"]*\);\([^"]*\)"/"\1_\2"/' fichier.txt
 
vw


---------------
The best way to accelerate a computer running windows is at 9.8m.s-2
Reply

Marsh Posté le 03-03-2009 à 10:48:04    

Merci Combi_A_Vendre,
 
Votre solution marche, par contre si j'ai la chaine suivante  
"aaaaaa";"rrrr";"ggggg";"tttt";"erererere;ererere";"rororororo"
lorsque j'applique la commande s/"([^"]*);([^"]*)"/"\1_\2"/ j'obtient le résultat suivant :  
"aaaaaa"_"rrrr";"ggggg";"tttt";"erererere;ererere";"rororororo"
 
Que faut t'il modifier dans la commande sed afin que uniquement le ";" contenu dans la chaine "erererere;ererere"  
soit remlpacé par un "_" ?  
 
Merci d'avance

Reply

Marsh Posté le 03-03-2009 à 11:37:49    

# sed 's/"\([^"]+\);\([^"]+\)"/"\1_\2"/' fichier.txt
 
ça forcera qu'il y ait au moins 1 caractère (symbole +) qui ne soit pas " de part et d'autre du ; entre "


---------------
"The pen is mightier than the sword if the sword is very short, and the pen is very sharp." TP. Mes Jeux. Mes Ventes. Groupe HFR sur PlayFire.
Reply

Sujets relatifs:

Leave a Replay

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