Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1086 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  modification d'une ligne dans un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

modification d'une ligne dans un fichier

n°1360385
ironhead36​t
Posté le 05-05-2006 à 13:40:54  profilanswer
 

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

 

mood
Publicité
Posté le 05-05-2006 à 13:40:54  profilanswer
 

n°1360401
Sve@r
Posté le 05-05-2006 à 14:01:29  profilanswer
 

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.
n°1360413
ironhead36​t
Posté le 05-05-2006 à 14:10:03  profilanswer
 

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

n°1360478
ironhead36​t
Posté le 05-05-2006 à 15:08:05  profilanswer
 

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

n°1360572
ironhead36​t
Posté le 05-05-2006 à 16:34:42  profilanswer
 

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?

n°1360611
Elmoricq
Modérateur
Posté le 05-05-2006 à 17:35:41  profilanswer
 

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

n°1360612
Sve@r
Posté le 05-05-2006 à 17:37:07  profilanswer
 

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.
n°1362486
ironhead36​t
Posté le 09-05-2006 à 15:42:12  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  modification d'une ligne dans un fichier

 

Sujets relatifs
Récuperer une ligne d'un fichier texte dans une variablesupprimer boite de dialogue lors de la fermeture fichier
[debutant] Structure de mon fichier correcte ?Contrôler un fichier avec l'extension .pdf
Enregistremt de fichier : choix du répertoire et du nom de fichier VBAchoisir le chemin de création d'un fichier txt
[BUILDER] Supprimer une ligne d'un fichier texteligne de code pour flash
modification d'un fichier en fonction du nombre de ligne / char. 
Plus de sujets relatifs à : modification d'une ligne dans un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR