modification d'une ligne dans un fichier

modification d'une ligne dans un fichier - Shell/Batch - Programmation

Marsh Posté le 05-05-2006 à 13:40:54    

Bonjour à tous,

 

Je suis en train d'écrire un script en shell, et à l'aide de ce script je souhaiterais modifier 1 ligne précise dans un fichier.
J'ai déjà récupéré le numéro de la ligne à modifier à l'aide d'un awk, puis d'un grep, maintenant je ne sais pas comment je pourrais modifier cette lignet
(en fait il ne s'agit que d'ajouter un mot à la fin de la ligne).
Sauriez-vous comment faire?

 

Merci d'avance pour votre aide

 

Julian

 

Reply

Marsh Posté le 05-05-2006 à 13:40:54   

Reply

Marsh Posté le 05-05-2006 à 14:01:29    

Donc t'as récupéré le n° de ligne (imaginons que ce soit "12" ) =>

awk -vlig=12 '{printf("%s", $0); if (NR == lig) printf("le mot en plus" ); printf("\n" )}' le_fichier_en_question > nouveau_fichier
mv nouveau_fichier le_fichier_en_question



---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 05-05-2006 à 14:10:03    

et y a pas possibilité de faire ça directement ? (je veux sans passer par un fichier "temporaire"?)
 
Est-ce que cette commande recopie tout le reste du fichier?
 
Merci

Reply

Marsh Posté le 05-05-2006 à 15:08:05    

est-il possible de procéder de la meme façon si on veut supprimer juste un mot dans une ligne?

Reply

Marsh Posté le 05-05-2006 à 16:34:42    

bonjour à tous,
 
encore une question
j'ai testé et tout marche très bien, par contre le mot à rajouter est un mot saisi par l'utilisateur, donc à la place de printf("le mot en plus" ) je met printf("%s",mot_saisi ), ou meme printf($mot_saisi ), je n'obtiens aucune modification.
 
est-ce normal?

Reply

Marsh Posté le 05-05-2006 à 17:35:41    

man awk
 
 
awk -v variable_utilisateur=$mot_saisi ...

Reply

Marsh Posté le 05-05-2006 à 17:37:07    

ironhead36t a écrit :

et y a pas possibilité de faire ça directement ? (je veux sans passer par un fichier "temporaire"?)


Si, on peut (on considère qu'on est toujours pour la ligne 12) en passant par "vi"

#!/bin/sh
vi le_fichier_a_traiter <<_EOT_ 1>/dev/null 2>&1
:12
Ale_mot_en_plus
:wq!
_EOT_


 

ironhead36t a écrit :

Est-ce que cette commande recopie tout le reste du fichier?


Le awk ? Ben oui, il affiche chaque ligne, si la ligne porte le n° attendu elle affiche en plus le mot, puis affiche une fin de ligne => tout le fichier (t'as qu'à tester...)
 

ironhead36t a écrit :

j'ai testé et tout marche très bien, par contre le mot à rajouter est un mot saisi par l'utilisateur, donc à la place de printf("le mot en plus" ) je met printf("%s",mot_saisi ), ou meme printf($mot_saisi ), je n'obtiens aucune modification.


Ben oui. Tu remarques pas que je passe à awk une valeur qu'il ne connait pas (la ligne) avec "-v"

#!/bin/sh
echo "Le mot  ?"
read mot
echo "La ligne ?"
read lig
awk -vmot_saisi=$mot -vlig=$lig '{printf("%s", $0); if (NR == lig) printf("%s", mot_saisi); printf("\n" )}' le_fichier_en_question > nouveau_fichier  
mv nouveau_fichier le_fichier_en_question


 

ironhead36t a écrit :

est-il possible de procéder de la meme façon si on veut supprimer juste un mot dans une ligne?


Avec awk, on peut faire exécuter par des algorithmes tous les traitements que l'on veut sur un fichier. Chaque ligne peut être traitée intégralement, ou mot par mot. Et t'as d'autres commandes qui te permettent aussi d'autres traitements
Tu devrais taper

  • man awk
  • man grep
  • man cut
  • man sed
  • man tr
  • man sort

Et télécharger ce bouquin: http://fr.lang.free.fr/cours/Shell_v1.4.pdf


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 09-05-2006 à 15:42:12    

merci pour votre aide a tous.
je vais aller jeter un coup d'oeil sur ce pdf.

Reply

Sujets relatifs:

Leave a Replay

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