[Résolu][SH-Sed] Supprimer une partie d'un fichier

Supprimer une partie d'un fichier [Résolu][SH-Sed] - Shell/Batch - Programmation

Marsh Posté le 12-10-2007 à 15:06:34    

Salut
La réponse est certainement triviale, mais je n'arrive pas à la trouver [:transparency] :
 
J'ai un fichier "bla" :

Code :
  1. Balise1 blablabla
  2. blablabla
  3. blablabla
  4. Balise2
  5. ligne à virer
  6. une autre ligne à virer
  7. Balise3
  8. héhéblabla
  9. héhéblabla


 
Je souhaite virer ce qu'il y a entre Balise2 et Balise3 (Balise2 et Balise3 non comprises), et ce avec un Sed.
 

Code :
  1. sed '/Balise2/,/Balise3/d' bla > myOutput


C'est bien joli, mais ça me vire les lignes contenant Balise2 et Balise3 :

Code :
  1. Balise1 blablabla
  2. blablabla
  3. blablabla
  4. héhéblabla
  5. héhéblabla


 
J'ai réussi en "trichant" :

Code :
  1. sed -n '/Balise1/,/Balise2/p' bla > myOutput
  2. sed -n '/Balise3/,$p' bla >> myOutput


 
mais il est certainement possible de faire ça en une seule ligne, nan ?
Si quelqu'un pouvait m'éclairer, et satisfaire ma curiosité, ce serait vraiment sympatoche !  [:hello_cass]


Message édité par Sub-N le 25-10-2007 à 14:19:07
Reply

Marsh Posté le 12-10-2007 à 15:06:34   

Reply

Marsh Posté le 15-10-2007 à 11:54:29    

Personne n'a une petite idée ? :)

Reply

Marsh Posté le 15-10-2007 à 17:42:32    

hum tu as essayé de substitute
 
Balise2
ligne à virer
une autre ligne à virer
Balise3
 
par  
 
Balise2\nBalise3 ?
 

Reply

Marsh Posté le 16-10-2007 à 09:19:07    

Euh, je vais t'avouer que je ne comprends pas trop ce que tu veux faire.
Tu parles de ça ?
 
sed 's/Balise2\nBalise3//' ? (cela ne marche pas)

Reply

Marsh Posté le 16-10-2007 à 09:41:42    

remplacer
 
Balise2
ligne à virer
une autre ligne à virer
Balise3
 
par  
 
Balise2
Balise3

Reply

Marsh Posté le 16-10-2007 à 10:44:21    

Bon, j'ai trouvé ça :
 
sed  '/Balise2/,/Balise3/{ /Balise2/b;/Balise3/b; s/.*//; }' essai.txt
 
Cependant, ça remplace mes lignes a effacer par des lignes vides (il reste les LF quoi). Mais je dois avouer que je ne comprends pas vraiment ce que fait exactement cette commande.
 
/Balise2/,/Balise3/  : bon, ok, on borne une zone
s/.*// : on remplace tous les caractères par "rien".
 
Mais pour le reste :/
 

Reply

Marsh Posté le 17-10-2007 à 18:50:21    

sed -n '1,/Balise2/p;/Balise3/,$p' bla


 


Message édité par aigles le 17-10-2007 à 18:51:15

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

Marsh Posté le 18-10-2007 à 00:34:31    

Ah ouais :D
Merci !
Punaise, faut vraiment que je me trouve une bonne doc sur sed moi :)

Reply

Marsh Posté le 08-09-2008 à 14:47:17    

dans le meme genre, j'ai un pbm équivalent :
 

toto
voiture rouge
vélo bleu
camion vert;


 
je voudrais virer tout entre "voiture rouge" et "camion vert" (y compris ces 4 mots, mais pas le point-virgule de la fin (c'est la que je seche)), pour avoir ca :
 

toto
;


 
J'ai bêtement essayé la suppression de lignes :
 
sed "/voiture rouge/,/camion vert/d" in.txt >out.txt
 
mais évidemment ca me supprime le point-virgule, puisque sur la meme ligne...
 
si quelqu'un a la solution, je suis preneur :)
 
merci


Message édité par Tamahome le 08-09-2008 à 14:47:55

---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Sujets relatifs:

Leave a Replay

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