Ajouter un caractère dans un fichier avec vi

Résolu
chrischris -  
 chrischris -
Bonjour,

Je cherche une manip sous vi ...
Donc dans un fichier j'ai des lignes. Certaines de ces lignes contienne des chiffres.
Je souhaite rajouter un caractère devant la suite de chiffre commençant par 1 2 ou 3.

Exemple :

toto 158569

je souhaite rajouter 033 devant le 1 ce qui donne : toto 033158569.

Je souhaite faire ça de façon automatique avec une commande sous vi (j'ai plusieurs lignes).

j'ai testé avec ce type de commande ==> :g/[123].....$/
Ça me sort bien toute les lignes désirées mais comment rajouter le 033 devant la chaine recherché ?

Voila : si un pro de VI passe pas là : Merci
A voir également:

6 réponses

lami20j
 
Re,

Alors essaie
:%s/\<\([1-3]\)/033\1/cg

Maintenant tu comprends pourquoi j'ai dit J'aurai préféré avoir ton fichier. ;-)
1
lami20j
 
Salut,

Essaie comme ça
:%s/\([1-3][0-9]\+\)/033\1/cg

J'aurai préféré avoir ton fichier.
0
chrischris
 
Oula, Merci, Merci !

Alors il faut m'expliquer ..

Mais cela marche presque parfaitement oui. Par contre il rajoute aussi le 033 dans la série de chiffres si il y a un 1 dans la série. Pour mon fichier voici 3 lignes exemples

toto 158963
titi 589616
et fifi 356948

La commande rajoute bien 033 devant le 1 de toto et devant le 3 fifi mais elle rajoute aussi 033 devant le 1 situé dans la suite de chiffre a titi ... et là moi je ne veut pas (je veut filtrer juste sur le premier chiffre)
0
chrischris
 
Oui et bien Merci ... cela fonctionne parfaitement ...

Par contre je n'ai pas tout compris ...le < et le \1/cg
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j
 
Re,

En fait ce n'est pas < mais \< ce qui veut dire limite de mots. Comme ça j'oblige que l'insertion se fera si et seulement devant le chiffre 1,2 ou 3 il y a une limite de mots (ce qu'on n'avait pas dans le 1er exemple)

\1 permet d'utiliser ceux qu'on a capturer avec les parenthèses donc pour écrire 033 suivi de chiffre respectif.
Sinon le chiffre qu'on a testé sera "mangé" par la regex.

Tu peux faire un test sans mettre \1 et tu verras la différence.
0
chrischris
 
Merci beaucoup,

je vais faire différents test afin de bien comprendre.

Bonne soirée
0