Pb sed : suppression de lignes

Résolu
Bonjour tout le monde,
je voudrais supprimer un ensemble de lignes d'un fichier.

1/ lorsque je tape
sed '1d' tmp
ça marche --> suppression de la 1ere ligne du fichier tmp. sauf que ça m'affiche toujours le reste du fichier. je voudrais rediriger la sortie ou qu'il n'y ait plus de sortie du tt.

2/ lorsque je tape
sed '1,5d' tmp
, ça marche --> je voudrais supprimer toutes les lignes de 1 à 5.

quelqu'un pourrait m'aider. je sais que vs etes super fort dans ce forum :) :) :)

merci
Configuration: Unix
Firefox 3.0.9

7 réponses

  1. Modérateur
    Salut,
    sed -n '1,5d' tmp > fichier.out
    1. ça ne marche pas :(

      bash-2.05$ wc -l tmp
           100 tmp
      bash-2.05$ sed -n '1,5d' tmp
      bash-2.05$ wc -l tmp
           100 tmp
      bash-2.05$ 
      

      j'ai l'impression que tt ne fonctionne pas pour moi !!! ça m'enerve
  2. Modérateur
    sed -n -i.bak '1,5d' tmp
    1. bash-2.05$ sed -n -i.bak '1,5d' tmp
      sed: illegal option -- i
      bash-2.05$ 
      


      toujours non.

      y'aurait-t-il une autre commande que sed pour supprimer les lignes?
  3. Modérateur
    sed -n '1,5d' tmp > tmp.bak && mv tmp.bak tmp

    1. bash-2.05$ sed -n '1,5d' tmp > tmp.bak && mv tmp.bak tmp
      bash-2.05$ wc -l tmp
             0 tmp
      


      en fait, la commande sed -n '1,5d' tmp ne retourne rien. Dans le fichier tmp.bak est vide d'où tmp vide
  4. Modérateur
    Oups ;-(( Enlève le "-n" :
    sed  '1,5d' tmp > tmp.bak && mv tmp.bak tmp
    1. Modérateur
      Sinon il y a "ed" aussi :
       ed -s fich <<< $'1,5d\nw'
      ;-))
      1. thanks a lot jipicy :)))
        tu m'aides bcp.

        une dernière question. je veux mettre tt ça dans un script :
        for MSISDN in $(cat msisdn.txt)
        do
          	echo $MSISDN
          	`perl -ne "next unless /^$MSISDN/;print and exit" base  >> tmp.txt`
          	num_ligne=`perl -ne "next unless /^$MSISDN/;print "$." and exit" Dump_IN_all.ctl`
          	echo $num_ligne
          	sed  '1,$num_ligned' tmp > tmp.bak && mv tmp.bak tmp  		
        done

        explication :
        je cherche une chaine $MSISDN dans le fichier base. si je trouve, je mets la ligne contenant la chaine ds un fichier tmp.txt.
        j'extrais le num de ligne où j'ai trouvé la chaine et je supprime toutes les lignes qui precedent ce num de ligne.

        Probleme :
        sed  '1,$num_ligned' tmp > tmp.bak && mv tmp.bak tmp

        comment séparer le num_ligne du d ???? question bete je sais mais je trouve pas ;(

        t'aurais une idée? merci
    2. si je mets
      for MSISDN in $(cat msisdn.txt)
      do
        	echo $MSISDN
        	`perl -ne "next unless /^$MSISDN/;print and exit" base  >> tmp.txt`
        	num_ligne=`perl -ne "next unless /^$MSISDN/;print "$." and exit" Dump_IN_all.ctl`
        	echo $num_ligne
        	sed  '1,"$num_ligne"d' tmp > tmp.bak && mv tmp.bak tmp  		
      done

      j'ai :
      bash-2.05$ extract_info.sh 
      21620001019
      sed: command garbled: 1,"$num_ligne"d
      bash-2.05$ 


      comment je peux constituer le sed avec mon num_ligne ?
      1. Modérateur
        Soit avec des quotes doubles autour de l'expression :
        sed  "1,$num_ligned" tmp

        soit comme ça :
        sed  '1,'"$num_ligne"'d' tmp
        1. la 1ere ne marche pas.

          la 2eme marche ::):)))))))

          merciiiiiiiiiii jipicy du fond du coeur