Rechercher : dans
Par :

Supprimer une partie d'un fichier -shell

Dernière réponse le 13 mai 2009 à 19:36:37 endefu, le 13 mai 2009 à 15:07:37 
 Signaler ce message aux modérateurs

Bonjour,

Je suis débutant en écriture de script shell. Je voudrais commencer par poser une question qui me semble simple, mais que je n'arrive toujours pas à résoudre (en tous cas simplement).

J'ai un fichier (file.txt) de la forme :
1 motif
2 ....
2 ....
1 ....
2 ....
2 ....

Disons que je cherche à supprimer toute la première partie 1 (et ses sous parties 2) sachant que je ne connais que un "motif". Pour chaque partie 1, je ne connais pas a priori le nombre de sous-partie 2, il y en a toujours au moins une mais pas de limite supérieur.
Alors je comptais faire :

sed -ni '/1 motif/, /1/ d' file.txt : Mais il me supprime aussi le deuxième 1 que je voulais garder.

Tous cette longue introduction pour demander si je peux avec sed (ou autres) retirer une partie entre deux motif (1) sans supprimer la ligne du deuxieme motif (1). J'ai le même problème avec :
sed '/1 motif/, /2/ c\blabla' file.txt | sed 's/blabla//' > file2.txt
ou:
sed '/1 motif/{N;/2/D}'

Merci pour votre probable futur aide.

Configuration: Linux Fedora
Firefox 3.0.10

Meilleures réponses pour « Supprimer une partie d'un fichier shell » dans :
[Windows] Impossible de supprimer un fichier ou un dossier Voir Si Windows n'arrive pas à supprimer un fichier ou un dossier, la cause peut être l'une des suivantes : Le fichier ou le dossier à supprimer est utilisé par un processus du système Le dossier à supprimer contient des fichiers ou dossiers cachés ...
[Windows/Corbeille] Supprimer un fichier sans confirmation VoirVous en avez assez de vider continuellement votre corbeille ? Il est possible de supprimer les fichiers sans passer par la corbeille de deux façons différentes : Méthode manuelle Méthode automatique Méthode manuelle Pour ne plus avoir à...
Restaurer un fichier supprimé par erreur VoirComment restaurer un fichier ? Vous avez supprimé un fichier par erreur ? Rien n'est perdu. Il se trouve peut-être dans la Corbeille. Pour vérifier si le fichier peut être récupéré, ouvrez la corbeille (qui se trouve sur le Bureau). Faire un...

1

jipicy, le 13 mai 2009 à 15:31:20

Salut,

[tmpfs]$ cat plop
1 motif
A ....
A ....
2 ....
B ....
B ....

[tmpfs]$ sed '/1 motif/,/2/{/2/b;d;}' plop
2 ....
B ....
B ....

[tmpfs]$
;-))
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

2

jipicy, le 13 mai 2009 à 16:34:05

Sinon avec "ed" c'est encore plus simpliste :

[tmpfs]$ cat foo
motif
A ....
A ....
bla ....
B ....
B ....

[tmpfs]$ ed -s foo <<<$'/motif/,/bla/-1d\nw bar'

[tmpfs]$ cat bar
bla ....
B ....
B ....

[tmpfs]$ 
Si tu veux éditer/modifier le même fichier (sans envoyer le résultat dans un fichier tiers), il suffit d'enlever le nom de fichier après le "w".
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

3

endefu, le 13 mai 2009 à 19:20:23

Tout d'abord merci pour ta réponse,

Mais je n'ai pas bien compris ta 1ière possibilité.
Effectivement faire deux commandes à ce point c'est pas mal (je ne savais pas ca possible).
Par contre c'est le b que je comprends pas.
Tu m'as inspiré une reponse, c'est à dire que je ferais la même chose mais avec p (print) plutôt que b(?)
sed '/1 motif/,/2/{/2.*/p;d}' plop : ceci m'a l'air de marcher lui aussi. Ce que je comprends c'est que j'écris la dernière ligne avant de tout effacer comme je le faisais précedemment.
Est ce que je me trompe? Est ce la même chose que avec b?

Merci

Répondre à endefu

4

jipicy, le 13 mai 2009 à 19:27:30

Oui.

Normalement la commande "b" (branch ou branchement) comme son nom l'indique se branche à la fin du script, sans interpréter les commandes qui suivent, imprime la ligne sur la sortie standard et charge une nouvelle ligne dans le tampon.

La commande "p" (print) fait la même chose. Honnêtement je n'avais jamais essayé dans la mesure où il n'y avait pas l'option "-n" (demande implicite d'affichage) et que la commande "b" faisait bien son boulot ;-))

Merci à toi. $ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

5

 endefu, le 13 mai 2009 à 19:36:37

Effectivement quand j'ai survolé/lu ton aide sur sed, j'ai vu quelques utilisations de b mais c'était toujours avec des etiquettes, d'où ma surprise. Je crois avoir compris ton explication je ferais des tests pour vérifier ca.

Honnêtement le -n je l'ai oublié donc c'était pas tout à fait controlé. :P .

Merci bien.
Problème résolu donc.

Répondre à endefu
Collection CommentÇaMarche.net