Bash:sed réagit différemment dans un scripte

Résolu
Bonjour à tous,

Voici mon problème.

Je cherche ici à enlever une ligne dans un fichier et remettre le contenu dans un autre fichier, que j'échangerai avec le premier à la fin.
exemple :

fich1:
DavisJ
TankianS
LeChuckGP

je veux virer TankianS et me retrouver avec:
fich2:
DavisJ
LeChuckGP

puis faire un mv de fich2 fich1.

si je fais à la main la commande pour viré la ligne "TankianS" ça me donne

sed -n  -e '/TankianS/!p' fich1.txt | tee -a >  fich2.txt

et j'ai bien dedans les 2 entrées qui ne sont pas TankianS.

par contre dans mon scripte, ça ne fonctionne pas. il me créér bien fich2.txt mais je me retrouve tjr avec les 3 entrées

J'ai essayé sans le "| tee" , et de mettre directement le > fich2.txt, mais il se produit le même phénomène.

Est-ce que quelqu'un aurait une explication et éventuellement une solution ?

Merci d'avance pour votre aide et vos conseils,

Ivy

--
"ça ne marche pas" n'est pas une source d'information suffisante pour que quiconque vous aide à dépanner quoique ce soit.

3 réponses

  1. Contributeur
    Salut,

    Affiche ton script, sans quoi difficile de voir d'où vient l'erreur ;-(

    Quel système ?
    Quelle distrib?
    Quelle version de sed, bash ?
    0
    1. Hello zipe31,

      Merci pour ta réponse rapide, voici les informations qu'il te manque.

      debian lenny(2.6.26-2)
      bash 3.2.39
      sed 4.1.5

      et pour ce qui est du scripte :
      dest="fich1.txt"
      desttmp="fich2.txt"
      
      echo "Entrez le nom de l'utilisateur a supprimer (format ThreepwoodG): "
      read nom
      
      if [ ! $nom ]; then
        echo "la variable est vide"
        exit
      fi
      
      echo "sed -n  -e '/$nom/!p' $dest | tee -a >  $desttmp"
      sed -n  -e '/$nom/!p' $dest | tee -a >  $desttmp
      
      
      


      j'ai pas encore mis le mv vu que j'obtenais pas ce qui était attendu déjà à ce stade.
      0
      1. Contributeur
        Les variables ne sont pas interprétées entre des quotes simples, il faut donc sortir de la commande de "sed" pour que ta variable soit interprétée :

        sed -n  -e '/'"$nom"'/!p' $dest | tee -a >  $desttmp

        On aurait pu mettre des quotes doubles directement autour de la commande, mais dans la mesure où tu utilises la négation (!) dans ta commande, on aurait eut une interaction avec le shell bash et un joli message d'erreur ;-(

        Voir dans la FAQ : SED - Le remplacement de variables
        0
    2. ah oui là ça fonctionne
      Merci,
      la prochaine fois je tâcherai de commencer par la faq ;-)

      Ivy
      0