[BASH]effacer d'un délimiteur à un autre

Résolu/Fermé
Iroboot - 5 mai 2009 à 15:59
 Iroboot - 7 mai 2009 à 14:33
Bonjour,

Voila j'ai un petit soucis : j'ai commencé a préparer un script en BASH dont le but est d'effacer. Jusque la rien de particulier mais c'est à dire qu'il doit effacer d'un certain délimiteur à un autre tout à fait différent, je m'explique :

j'ai un fichier suivant :

nom.txt :

#jean toto
user = jeant {
blablabla
}

#Michelle tata
user = michelle tata {
blablabla
}

#rené titi
user = renet {
blablabla
}



j'ai un fichier contenant :

adetruire.txt :

jeant
renet



et j'aimerai effacer de "user" à "}" pour me retrouver avec :

nom2.txt :

#jean toto

#Michelle tata
user = michelle tata {
blablabla
}

#rené titi



Donc j'aimerai effacer tout (en comparant les deux fichiers) du "user" au "}"
j'ai déjà commencé à faire un script mais le seul soucis est qu'il m'efface que la ligne avec user :( je vous le donne :

monscript.sh :

#! /bin/bash

#set -x

while read line
do

commande2="sed -i '/$line/d' nom2.txt"
eval $commande2

done < nom.txt



PS : il y a une longue partie avant, ce n'est qu'un bout du script car je dois plusieurs opérations, prévenez moi si mon script vous semble incomplet pour effectuer cela ;) (si mon script vous semble improbable et ne marche pas etc ...)


Merci d'avance a tous :D.

3 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
7 mai 2009 à 14:26
Salut,
[tmpfs]$ cat nom.txt
#jean toto
user = jeant {
blablabla
}

#Michelle tata
user = michelle tata {
blablabla
}

#rené titi
user = renet {
blablabla
}

[tmpfs]$ cat adetruire.txt
jeant
renet

[tmpfs]$ cat foo.sh
#! /bin/sh

#set -xv

while read line
do
sed -i "/${line}/,/\}/d" nom.txt
done < adetruire.txt

[tmpfs]$ ./foo.sh

[tmpfs]$ cat nom.txt
#jean toto

#Michelle tata
user = michelle tata {
blablabla
}

#rené titi

[tmpfs]$ 
;-))
2
Merci beaucoup :D j'étais en train de tester avec le tutoriel sur SED (que tu as édité il me semble ;) ) et la fonction qui efface entre deux motifs ... Fallait faire un mélange de cela avec ma fonction XD.

Merci beaucoup problème résolu :D
1
petit up ?

Y a personne ? :'(
0