supprimer une ligne dans un fichier texte en bash [résolu]

supprimer une ligne dans un fichier texte en bash [résolu] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 26-01-2004 à 16:32:47    

salut !!
 
je cherche une commande qui me permettrait de chercher une valeur dans un fichier texte puis de la remplacer .
 
exemple avec le fichier suivant (essai.txt)
 

bonjour je m'appelle machin,
 
sdfdf
fddf

 
je voudrais lancer une commande et avoir le fichier essai.txt :
 

bonjour je m'appelle truc
 
sdfdf
fddf

 
c surement tres facile mais j'avoue quentre les grep ...
j'y suis pas arrivé
j'ai essayé avec "sed" mais j'arrive pas a ce qu'il conserve le resultat dans le fichier, meme avec "> fichier" ...
 
Merci d'avance
 
 [:alex_]


Message édité par davyd le 03-02-2004 à 11:37:50

---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 26-01-2004 à 16:32:47   

Reply

Marsh Posté le 26-01-2004 à 16:38:59    

cat essai.txt | sed s/machin/truc/ > fichier2.txt ne fonctionne pas ?

Reply

Marsh Posté le 26-01-2004 à 16:41:45    

ouai en fait ca marche mais il faut que je crée un nvo fichier .
 
si je fais  
"sed 's/truc/machin/' fichier.txt > fichier.txt " ca merde
mais  
"sed 's/truc/machin/' fichier.txt > fichier2.txt " ca marche
 
Bon merci en tt cas du conseil !!!
 
bonne soiree  


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 26-01-2004 à 17:06:07    

ben tu fais "sed 's/truc/machin/' fichier.txt > fichier2.txt && mv fichier2.txt fichier.txt"

Reply

Marsh Posté le 26-01-2004 à 17:24:46    

arghbis a écrit :

ben tu fais "sed 's/truc/machin/' fichier.txt > fichier2.txt && mv fichier2.txt fichier.txt"


 
[:plusun]

Reply

Marsh Posté le 02-02-2004 à 14:43:55    

Avec perl, pas besoin de fichier intermédiaire :
 
perl -pi -e 's/truc/machin/g' fichier.txt


---------------
Jean Pierre.
Reply

Marsh Posté le 03-02-2004 à 10:57:44    

ca marche nickel le perl
 
mais si jamais je veux effacer une ligne qui contient ce mot mais uniquement ce mot je fais comment ??  :??:  
 
par exemple j'ai un fichier essai.txt qui contient :

bart_homer
bart
marge
bartoli

 
je veux effecer uniquement la ligne qui contient bart et pas celles qui ont aussi la chaine "bart" contenu dans leur nom
 
donc je voudrais avoir le fichier essai.txt :
 

bart_homer
marge
bartoli

 
Merci de votre aide   :jap:


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 03-02-2004 à 10:58:52    

s/^bart$//;
 
de rien

Reply

Marsh Posté le 03-02-2004 à 11:02:27    

merci !!
 
et si jamais j'ai une chaine de caractere genre  
 
@bart.com bart
 
pr supprimer la ligne entiere aussi ??


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 03-02-2004 à 11:04:45    

ben quand tu parcours ton fichier, tu fais un : next if (/\s+bart\s+/);
 
--edit--
 
c pas top de supprimer les lignes, vaut mieux faire des conditions d'action


Message édité par arghbis le 03-02-2004 à 11:05:14
Reply

Marsh Posté le 03-02-2004 à 11:04:45   

Reply

Marsh Posté le 03-02-2004 à 11:09:15    

et y a pas moyen de lui dire enleve la ligne ou y a cette expressio n en le mettant entre guillemets ou une connerie comme ca ??
 
parce  que j'avoue que j'ai un peu de mala a comprendre la syntaxe de ta derniere reponse ... :heink:  
 


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 03-02-2004 à 11:22:05    

ca m'a enlevé que 'bart' la commande que tu m'as mis mais ca m'a laissé le debut de la ligne:
 
avant :
@bart.com bart
 
maintenant:
@bart.com
 


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 03-02-2004 à 11:36:05    

ben c normal, la prmmière substitue la chaine bart, et uniquement celle-ci, par rien.
 
pour ce que tu veux faire, j'imagine que tu parcours ton fichier avec un truc dans le genre :

Code :
  1. while (<R> ) {
  2.   chomp;
  3.   next if (/\s+bart\s+/);
  4. faire truc bidule;
  5. }


 
ça, ça marche


Message édité par arghbis le 03-02-2004 à 11:37:01
Reply

Marsh Posté le 03-02-2004 à 11:36:34    

j'ai trouvé !!  :bounce:  
 
en fait comme un con j'avais meme pas tilté que "@" ct un caractere special et que fallait que je mette un \ devant ... :pt1cable:  
 
 
donc voila maintenant ca marche  
je tape la commande :
perl -pi -e 's/^\@bart.com\sbart$+//g' monfichier.txt
 
Merci de ton aide en tt cas arghbis !!  :jap:  
 
 


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 03-02-2004 à 11:37:42    

ah ok, tu le fais uniquement en ligne de commande, pas de script perl...

Reply

Marsh Posté le 03-02-2004 à 14:09:13    

ouai je suis un barbare ... :lol:


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Sujets relatifs:

Leave a Replay

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