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

Résolu/Fermé
IvyAlice Messages postés 379 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 14 septembre 2013 - 19 août 2011 à 09:00
IvyAlice Messages postés 379 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 14 septembre 2013 - 19 août 2011 à 09:46
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 voir également:

3 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
19 août 2011 à 09:03
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
IvyAlice Messages postés 379 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 14 septembre 2013 32
19 août 2011 à 09:09
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
19 août 2011 à 09:15
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
IvyAlice Messages postés 379 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 14 septembre 2013 32
19 août 2011 à 09:46
ah oui là ça fonctionne
Merci,
la prochaine fois je tâcherai de commencer par la faq ;-)

Ivy
0