[UNIX] Substitution caractère dans un fichier
looping605
Messages postés
9
Statut
Membre
-
Maryline -
Maryline -
Bonjour,
J'aurais voulu savoir si quelqu'un connaissait des commandes unix permettant de substituer un caractére par un autre dans un fichier, dont on spécifit la position dans le fichier concerné ( n° ligne et n° colonne ).
J'ai essayé de la manière suivante :
vi toto.txt << EOT
:3
69l
rS
:x!
EOT
exit 0
Mais le soucis est que cela ne fonctionne que si le fichier est editable sous vi.
Il arrive que pour certains "gros" fichiers j'ai le problème suivant :
"titi.txt" Line too long
Merci d'avance de vos réponses
J'aurais voulu savoir si quelqu'un connaissait des commandes unix permettant de substituer un caractére par un autre dans un fichier, dont on spécifit la position dans le fichier concerné ( n° ligne et n° colonne ).
J'ai essayé de la manière suivante :
vi toto.txt << EOT
:3
69l
rS
:x!
EOT
exit 0
Mais le soucis est que cela ne fonctionne que si le fichier est editable sous vi.
Il arrive que pour certains "gros" fichiers j'ai le problème suivant :
"titi.txt" Line too long
Merci d'avance de vos réponses
8 réponses
-
Re-
[jp@MDK tmpfs] $ cat toto.txt 123123123 456456456 789789789 123123123 456456456 789789789 [jp@MDK tmpfs] $ sed -i.bak '3s/\(.\{3\}\)\(.\{1\}\)\(.*\)/\1A\3/' toto.txt [jp@MDK tmpfs] $ cat toto.txt 123123123 456456456 789A89789 123123123 456456456 789789789;-)) -
Salut,
Tu peux donner un exemple plus précis (fichier en entrée et résultat escompté en sortie), s'il te plaît, merci.
Sinon tu peux déjà voir du côté de la commande "sed" (associée surement à d'autres pour ce que je pense avoir compris de ce que tu veux faire)
;-)) -
Re-bonjour,
Je vais essayer d'être plus précis.
je veux pouvoir modifier un caractére dans un fichier via un script.
Par exemple j'ai un fichier toto.txt
dans ce fichier, j'ai les enregistrements suivants :
123123123
456456456
789789789
je souhaite substituer le caractére "7" de la 3eme ligne de la 4 éme colonne en un caractére "A" afin d'obtenir :
123123123
456456456
789A89789
Cela fonctionne si j'utilise le script toto.ksh suivant :
Serveur_Test>more toto.ksh
#!/usr/bin/ksh
vi toto.txt << EOT
:2
4l
rA
:x!
EOT
exit 0
Le problème se pose lorsque le fichier toto.txt, qui doit être éditer contient beaucoup trop d'enregistrement pour être edité avec "vi".
Dans ce cas, la proc. ne fonctionne pas.
J'ai essayé avec la commande "sed" mais je n'ai pas trouvé l'option permettant de passer en paramétre un n° de colonne.
Merci -
Salut,
123123123
456456456
789789789
je souhaite substituer le caractére "7" de la 3eme ligne de la 4 éme colonne en un caractére "A" afin d'obtenir :
123123123
456456456
789A89789
je n'ai pas testé, mais essaie quand même
perl -pi.orig -e 's/^(.*){3}./$1A/ if 3..3' toto.txtlami20j -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Salut,
Merci de ton aide.
J'ai testé la commande perl :
perl -pi.orig -e 's/^(.*){3}./$1A/ if 3..3' toto.txt
le soucis est que la troisième ligne est totalement substitué par le caractère "A" :
Serveur_Test>more toto.txt
123123123
456456456
A
Je pensais à un truc du genre :
cat toto.txt | sed -e "3s/7/A/g" > toto.txt_new1
ais dans ce cas tous les caractères "7" de la 3éme ligne vont être substitués par des caractères "A" comme suit :
Serveur_Test>more toto.txt_new1
123123123
456456456
A89A89A89
Et c'est là que je bloque, je ne vois pas comment donner en entrée de ma commande sed la position spécifique de caractère "7" à modifier sans que les autres "7" de cette ligne ne soient modifiés.
@+ -
Re,
le soucis est que la troisième ligne est totalement substitué par le caractère "A" :
Oui, je n'ai pas fait attention. C'est de ma faute.
.* avale la chaine entière ;)
Essaieperl -pi.orig -e 's/^(.{3})./$1A/ if 3..3' toto.txtlami20j -
Ok c'est nickel comme ça ;-))
-
Effectivement, la commande perl fonctionne tres bien.
Mais comment fait-on si on a un enchainement de n caractère à remplacer.
Dans l'exemple ci dessus, remplacer 789 par AAA ?
Merci de votre aide.