View previous topic :: View next topic |
Author |
Message |
netman Apprentice
Joined: 03 Oct 2003 Posts: 204 Location: France - Sud
|
Posted: Tue Aug 24, 2004 2:59 pm Post subject: [script / urgent] Pb suppression ligne d'un fichier |
|
|
Hola ca faisait longtemsp
retour de vacance oblige petit mais vraimeent petit soucis mais qui me fait bien chier . . .
Je voudrait en fait automatise la suppression d'un alias dans mon fichier /etc/mail/aliases quand je supprime mon user et voici donc ce qe j'ai fait :
Code: | #!/bin/bash
fichier=""
for ligne in $(sudo cat /etc/mail/aliases)
do
if test $(echo $ligne | cut -f1 -d":") != $1
then
fichier=$fichier$ligne
fi
done
sudo echo $fichier > /etc/mail/aliases
# postalias /etc/mail/aliases
# postfix reload
exit |
Ben mon pb c que ca marche pas.
Les ligne renvoye par la boucle for ne sont pas des lignes entieres et me renvoie en fait une ligne a chaque fois qu'il croise un : fin un truc de fou quoi.
Si qlq'un pouvais me file un coup de main ca serait cool merci.
donc pour resume : je veux supprimer la ligne de mon fichier qui comprend la valeur $1 que j'envoie en parametre avec mon script.
Voila merci d'avance +++ |
|
Back to top |
|
|
guilc Bodhisattva
Joined: 15 Nov 2003 Posts: 3326 Location: Paris - France
|
|
Back to top |
|
|
sireyessire Advocate
Joined: 20 Mar 2003 Posts: 2991 Location: back in Paris, France
|
Posted: Tue Aug 24, 2004 3:42 pm Post subject: |
|
|
le problème c'est que de toute façon là tu renvoie dans ton fichier une seule ligne avec tout tes autres alias.
je te propose:
Code: |
#!/bin/bash
tmp_file="/tmp/alias.tmp"
#on vire le fichier temp s'il existe
if(test -e $tmp_file)
then
rm $tmp_file
fi
echo "Removing "$1" from /etc/alias"
#scanning
for ligne in `sudo cat /etc/mail/aliases`
do
if( test $(echo $ligne | cut -f1 -d":") != $1)
then
echo $ligne>>$tmp_file
fi
done
#on copie le résultat dans le fichier alias
sudo mv $tmp_file /etc/mail/alias
#on sort
echo $1" removed from /etc/mail/alias"
exit |
pour garder ton truc, mais je pense que sed doit faire ça tout seul
[EDIT] cramé par guilc _________________ I never think of the future. It comes soon enough.
Albert Einstein
Try simpler first
Shockley |
|
Back to top |
|
|
netman Apprentice
Joined: 03 Oct 2003 Posts: 204 Location: France - Sud
|
Posted: Wed Aug 25, 2004 2:02 pm Post subject: |
|
|
Ah ben ouais je pense que la je vais quand meme utilise sed
On va pas reinvente l'eau chaude
Merci pour le coup de main.
PS j'aurais bien repondu avant mais hier soir pas le tps et ce matin en reunion
++
EDIT : Ca marche nickel sauf qu'il me laisse en fait la ligne avec rien dessus . . .
Mais ca risque de vite foutre le bordel . . .
Y aurait un moyen de supprimer aussi le retour chariot avec histoire qu'il y ai pas des espaces dans mes alias . . . |
|
Back to top |
|
|
Zentoo Apprentice
Joined: 18 Nov 2002 Posts: 195 Location: /dev/console
|
Posted: Thu Aug 26, 2004 8:02 pm Post subject: |
|
|
HE ben tu peux toujours filtrer ton fichier avec grep pour enlever les lignes vides:
Code: | grep -v "^$" ton_fichier > nouveau_fichier_sans_lignes_vides |
regarde les options de grep pour voir si tu peux le faire "in place" c'est a dire sans passer par un autre fichier d'ailleurs pour ton probleme initial tu peux faire un Code: | sed -i -e "s/blabla//g" ton_fichier | ce qui te permets d'eviter un fichier temporaire.
Voili voilou... |
|
Back to top |
|
|
neysx Retired Dev
Joined: 27 Jan 2003 Posts: 795
|
Posted: Thu Aug 26, 2004 9:26 pm Post subject: |
|
|
netman wrote: | Ah ben ouais je pense que la je vais quand meme utilise sed
On va pas reinvente l'eau chaude | Ben non. netman wrote: | EDIT : Ca marche nickel sauf qu'il me laisse en fait la ligne avec rien dessus . . .
Y aurait un moyen de supprimer aussi le retour chariot avec histoire qu'il y ai pas des espaces dans mes alias . . . | C'est parce que tu remplaces une expression rationnelle par rien du tout au lieu d'effacer la ligne qui contient l'expression recherchée. Il suffit de Code: | sed -i '/EtZou/d' /etc/mail/aliases | Fais bien attention à l'expression que tu passes, car /toto/ supprimera aussi les lignes avec tititoto et tototutu. Une expression du genre /^etZou:/ serait peut-être à conseiller
L'accent circonflexe ancre la recherche au début de la ligne et les deux-points font partie de la chaîne recherchée. |
|
Back to top |
|
|
netman Apprentice
Joined: 03 Oct 2003 Posts: 204 Location: France - Sud
|
Posted: Fri Aug 27, 2004 11:10 am Post subject: |
|
|
ahhh merci je vais tester ca de ce pas
Merci pour le tuyau ! !! |
|
Back to top |
|
|
br0mGreV Apprentice
Joined: 28 Jul 2004 Posts: 265 Location: Paris, France
|
Posted: Fri Aug 27, 2004 12:19 pm Post subject: |
|
|
ou bien un bon vieux grep -v :
Code: | cat file | grep -v "^toto:" |
[edit]bon d'accord, déjà ennoncé plus pour supprimer les lignes vides, mais autant utiliser ca pour parser directement le fichier[/edit] _________________ Rien n'est éternel, pas même les problèmes... |
|
Back to top |
|
|
neysx Retired Dev
Joined: 27 Jan 2003 Posts: 795
|
Posted: Fri Aug 27, 2004 12:41 pm Post subject: |
|
|
br0mGreV wrote: | ou bien un bon vieux grep -v :
Code: | cat file | grep -v "^toto:" |
[edit]bon d'accord, déjà ennoncé plus pour supprimer les lignes vides, mais autant utiliser ca pour parser directement le fichier[/edit] | La question est de savoir comment supprimer une ligne d'un fichier et si tu fais cat file | grep -v "^toto:" >file, tu vas supprimer un peu plus que la ligne |
|
Back to top |
|
|
br0mGreV Apprentice
Joined: 28 Jul 2004 Posts: 265 Location: Paris, France
|
Posted: Fri Aug 27, 2004 12:53 pm Post subject: |
|
|
hmmpf,
vais reviser mes standard alors.
Dommage que je n'ai pas pu vérifier avant ( shame on me*)
[* : terme anglais signifiant : Honte sur moi ] _________________ Rien n'est éternel, pas même les problèmes... |
|
Back to top |
|
|
|