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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  inserer et supprimer des lignes dans un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

inserer et supprimer des lignes dans un fichier

n°1772801
donny3
Posté le 13-08-2008 à 11:04:31  profilanswer
 

Salut,
 
Pour inserer des lignes les une après les autres dans un fichier je fait ceci :

Citation :

echo "test" >> monfichier


 
Ex :

Citation :


test
test
test


 
Dans mon fichier j'ai trois lignes avec test, comment pourrai je faire pour supprimer une ligne ..??
 
Pour compter le nombre de ligne je fais ceci :

Citation :


[donny@perf script]$ wc -l pmaj_lock
      3 monfichier
 


 
comment pourrai je faire pour ne récupérer que le 3 ??
 
Merci de votre aide.

mood
Publicité
Posté le 13-08-2008 à 11:04:31  profilanswer
 

n°1772816
donny3
Posté le 13-08-2008 à 11:33:04  profilanswer
 

pour la suppression j'ai trouver ceci  
 
sed '$d' mon_fichier.txt  
 
mais le truc c'est que quand j'ouvre mon fichier j'ai toujours les 3 lignes

n°1772870
h4rold
Posté le 13-08-2008 à 14:01:21  profilanswer
 

J'ai pas très bien compris.
Tu cherche a supprimer une ligne dans un fichier.
 

Code :
  1. test
  2. test
  3. test


donnerait

Code :
  1. test
  2. test


 
?

n°1772892
donny3
Posté le 13-08-2008 à 14:47:16  profilanswer
 

ouai c'est ça
je viens de tester avec cela
 sed -i.bak '$d' monfichier
 
et cela fonctionne;
le d'avoir ajouté le .bak, la ligne est bien supprimé du fichier
et je ne comprends pas trop comment cela fonctionne;

n°1773129
Sve@r
Posté le 14-08-2008 à 09:23:01  profilanswer
 

donny3 a écrit :


et je ne comprends pas trop comment cela fonctionne;


Le principe général d'une commande Unix/Linux est la suivante
clavier => commande => écran
 
A partir de ce principe simplissime, et en utilisant les redirections entrées et sorties, on peut enchainer tout un ensemble de commandes à suivre. Chaque commande étant elle-même très simple mais l'enchainement créé donnera un traitement complexe pouvant s'appliquer aussi aux fichiers puisqu'il suffira d'utiliser la commande cat qui envoie un fichier à l'écran et en commençant la redirection à partir de cette commande
Cet enchainement aura la forme générale suivante
cat fichier_input |commande1 |commande2 |commande3 |commande4 |... |commandeX > fichier_output
 
Exemple

Code :
  1. cat monfichier |sed '$d' >result


C'est le principe de base.
 
Cependant certaines commandes plus complètes acceptent de recevoir elles-mêmes le fichier en paramètre. Elles s'occupent alors elles-mêmes de le lire. sed en fait partie. Donc l'exemple précédent peut se réduire en

Code :
  1. sed '$d' monfichier >result


ce qui évite un processus.
 
D'un autre coté, le mécanisme de sortie est invariant. La dernière commande de la chaine enverra son résultat à l'écran ce qui permettra dans un autre cas de l'imbriquer dans une autre chaine (comme un lego).
De plus, la redirection finale commence par écraser le fichier de sortie. Il s'ensuit que si on tente la syntaxe suivante
cat fichier |traitement >fichier
On perd tout puisque le shell commence par écraser le fichier. Ainsi, si on doit modifier son fichier input, il faut passer par 2 phases

Code :
  1. cat fichier |traitement >fichier_temporaire
  2. mv fichier_temporaire fichier


En faisant bien attention aux accès concurrents (que se passe-t-il pour "fichier_temporaire" si 2 utilisateurs lancent ce code en même temps => penser donc à utiliser un nom unique pour "fichier_temporaire" en faisant intervenir la variable "$$" dans son nom)
 
Cependant, certaines commandes très rares ont été créées pour s'occuper elles-mêmes de la phase "fichier_temporaire". Je connaissais "sort" avec l'option "-o" mais il semble que "sed" avec "-i" puisse aussi le faire.
C'est ce qui se passe quand tu fais "sed -i.bak '$d' monfichier".
 
Maintenant, si tu dois faire plusieurs modifs dans ton fichier, tu peux aussi passer par "vi" en automatisé. C'est un processus lourd mais 100% garanti.
Exemple

Code :
  1. vi monfichier <<_EOT_ >/dev/null
  2. :3
  3. dd
  4. :w!
  5. :q
  6. _EOT_


C'est pas forcément utile pour juste la suppression de la ligne 3 mais pour des modifs plus complexes, ça peut être intéressant...


Message édité par Sve@r le 14-08-2008 à 09:31:29

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1774032
donny3
Posté le 18-08-2008 à 10:22:33  profilanswer
 

merci


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

  inserer et supprimer des lignes dans un fichier

 

Sujets relatifs
tailles de lignes fixes[VS] partager un fichier de class ds plusieurs projets d'une solution
[ANT] Lire un fichier XML[Shell] - Création de comptes a partir d'un fichier txt
[PHP] Meilleure façon d'insérer du contenu HTMLse placer dans un fichier.txt en C [ Probléme Résolut ]
petit pg pour supprimer certaines propriétés d'un fichier son (mp3)recuperer le contenu d'un fichier
fichier sur lecteur reseau ? 
Plus de sujets relatifs à : inserer et supprimer des lignes dans un fichier


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