[BASH]effacer d'un délimiteur à un autre
Résolu
Iroboot
-
Iroboot -
Iroboot -
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.
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
-
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]$;-))
-
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 -