Posez votre question Signaler

Pb sed : suppression de lignes [Résolu]

userette - Dernière réponse le 23 avril 2009 à 17:42
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
Lire la suite 

Pb sed : suppression de lignes »

12 réponses
Réponse
+0
moins plus
Salut,
sed -n '1,5d' tmp > fichier.out
userette - 23 avril 2009 à 16:08
ç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
Ajouter un commentaire
Réponse
+0
moins plus
sed -n -i.bak '1,5d' tmp
userette - 23 avril 2009 à 16:11
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?
Ajouter un commentaire
Réponse
+0
moins plus
sed -n '1,5d' tmp > tmp.bak && mv tmp.bak tmp

userette - 23 avril 2009 à 16:16
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
Ajouter un commentaire
Réponse
+0
moins plus
Oups ;-(( Enlève le "-n" :
sed  '1,5d' tmp > tmp.bak && mv tmp.bak tmp
Ajouter un commentaire
Réponse
+0
moins plus
Sinon il y a "ed" aussi :
 ed -s fich <<< $'1,5d\nw'
;-))
userette - 23 avril 2009 à 17:02
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
Ajouter un commentaire
Réponse
+0
moins plus
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 ?
Ajouter un commentaire
Réponse
+0
moins plus
Soit avec des quotes doubles autour de l'expression :
sed  "1,$num_ligned" tmp

soit comme ça :
sed  '1,'"$num_ligne"'d' tmp
userette - 23 avril 2009 à 17:42
la 1ere ne marche pas.

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


merciiiiiiiiiii jipicy du fond du coeur
Ajouter un commentaire
Ce document intitulé « pb sed : suppression de lignes » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?