Bash:sed réagit différemment dans un scripte
Résolu
IvyAlice
Messages postés
379
Date d'inscription
Statut
Membre
Dernière intervention
-
IvyAlice Messages postés 379 Date d'inscription Statut Membre Dernière intervention -
IvyAlice Messages postés 379 Date d'inscription Statut Membre Dernière intervention -
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
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
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:
- Bash:sed réagit différemment dans un scripte
- Bingo bash - Télécharger - Divers Jeux
- Bash list ✓ - Forum Shell
- Bash permission non accordée - Forum Shell
- Bash pause ✓ - Forum Shell
- Bash addition - Forum Programmation
3 réponses
Salut,
Affiche ton script, sans quoi difficile de voir d'où vient l'erreur ;-(
Quel système ?
Quelle distrib?
Quelle version de sed, bash ?
Affiche ton script, sans quoi difficile de voir d'où vient l'erreur ;-(
Quel système ?
Quelle distrib?
Quelle version de sed, bash ?
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 :
j'ai pas encore mis le mv vu que j'obtenais pas ce qui était attendu déjà à ce stade.
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.
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 :
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
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