SHELL-Commande sed ne supprime pas les lignes

Résolu
Pedroo -  
 helpeerr -
Bonjour,

En shell, le code suivant :

sed -n '/error/d' monfichier.txt

ne marche pas : les lignes contenant 'error' ne sont pas supprimées

Merci pour votre aide

4 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Pour comprendre, bonne lecture ici

    lami20j@debian-acer:~$ cat plop
    aaaa
    error
    bbbb
    error aaa
    cccc error
    dddd
    lami20j@debian-acer:~$ sed -n '/error/d' plop
    lami20j@debian-acer:~$ sed -e '/error/d' plop
    aaaa
    bbbb
    dddd
    lami20j@debian-acer:~$ cat plop
    aaaa
    error
    bbbb
    error aaa
    cccc error
    dddd
    lami20j@debian-acer:~$ sed -e '/error/d' plop > plop.tmp
    lami20j@debian-acer:~$ cat plop
    aaaa
    error
    bbbb
    error aaa
    cccc error
    dddd
    lami20j@debian-acer:~$ cat plop.tmp 
    aaaa
    bbbb
    dddd
    lami20j@debian-acer:~$ sed -i.orig '/error/d' plop
    lami20j@debian-acer:~$ cat plop
    aaaa
    bbbb
    dddd
    lami20j@debian-acer:~$ cat plop.orig
    aaaa
    error
    bbbb
    error aaa
    cccc error
    dddd

    2
    1. Pedroo
       
      Merci pour toutes tes explications.
      J'ai cru qu'on pouvait le faire sans passer par un fichier temporaire.
      Merci bien ;)
      0
    2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Re,

      J'ai cru qu'on pouvait le faire sans passer par un fichier temporaire.
      Oui, on peut. C'était le dernier exemple avec l'option -i
      Regarde attentivement ;-)
      En fait le fichier original est sauvegardé avec l'extension .orig


      lami20j@debian-acer:~$ sed -i.orig '/error/d' plop  
      lami20j@debian-acer:~$ cat plop  
      aaaa  
      bbbb  
      dddd  
      lami20j@debian-acer:~$ cat plop.orig  
      aaaa  
      error  
      bbbb  
      error aaa  
      cccc error  
      dddd
      0
    3. Pedroo
       
      Salut,

      ça ne fonctionne pas de mon côté : l'option -i n'est pas reconnue (illegal option)...

      Ca marche bien en faisant :

      sed -e '/error/d' plop_temp.txt > plop.txt
      rm plop_temp.txt
      0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    l'option -i n'est pas reconnue (illegal option)...

    Tu es sur quel système?
    Tu as quelle version de sed ?
    Chez moi j'ai
    lami20j@debian-acer:~$ sed --version  
    GNU sed version 4.2.1


    On peut le faire avec perl alors

    lami20j@debian-acer:~$ cat plop  
    aaaa  
    error  
    bbbb  
    error aaa  
    cccc error  
    dddd  
    lami20j@debian-acer:~$ perl -ni.orig -e 'print unless /error/' plop  
    lami20j@debian-acer:~$ cat plop  
    aaaa  
    bbbb  
    dddd  
    lami20j@debian-acer:~$ cat plop.orig  
    aaaa  
    error  
    bbbb  
    error aaa  
    cccc error  
    dddd
    1
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    Ou avec une combinaison grep et echo

    lami20j@debian-acer:~$ cat plop
    aaaa
    error
    bbbb
    error aaa
    cccc error
    dddd
    lami20j@debian-acer:~$ var=$(grep -v error plop) && echo "$var" > plop
    lami20j@debian-acer:~$ cat plop
    aaaa
    bbbb
    dddd
    1
  4. Pedroo
     
    la commande
    sed --version
    ne marche pas non plus... bizarre

    Mais tes deux autres solutions (perl et grep+echo) marchent parfaitement, avec une préférence pour la dernière car je n'ai pas de fichier à supprimer ensuite.

    Encore merci ;)
    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Re,

      De rien ;-)

      avec une préférence pour la dernière car je n'ai pas de fichier à supprimer ensuite.
      Il suffit d'enlever .orig de la commande perl et il n'y aura plus de fichier à supprimer.
      Toutefois, quand on n'est pas sur de résultat il faut penser faire une sauvegarde de fichier d'origine
      A savoir que .orig est-une extension crée par moi, tu peux mettre n'importe quoi .bak, .old, .ancien, .blabla

      Voici sans sauvegarde de fichier original (la dernière commande montre qu'il n'y a pas d'autres fichiers à part plop)

      lami20j@debian-acer:~$ cat plop
      aaaa
      error
      bbbb
      error aaa
      cccc error
      dddd
      lami20j@debian-acer:~$ perl -ni -e 'print unless /error/' plop 
      lami20j@debian-acer:~$ cat plop
      aaaa
      bbbb
      dddd
      lami20j@debian-acer:~$ cat plop.orig
      cat: plop.orig: No such file or directory
      0
    2. helpeerr
       
      ajoute l'option -i
      0