Substitution de chaine de caractère à l'aide de sed - Codes et scripts - Linux et OS Alternatifs
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
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
Marsh Posté le 03-03-2009 à 10:19:38
Bonjour,
Rajoute des "\" devant les parenthèses :
# sed 's/"\([^"]*\);\([^"]*\)"/"\1_\2"/' fichier.txt
vw
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
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 "
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