merci pour cette proposition mais je n'ai pas été assez clair sur mon problème et j'en suis désolé.
En fait j'avais commencé par faire un petit script, vu les besoins que j'avais, lisant ligne par ligne mais cela n'a pas fonctionner et je suis dans une impasse dans cette voie là à cause des tests d'égalités (une ligne contient "*{" pas forcement au début), je ne connais pas de matches en shell et surtout le read ligne à ligne engendrait des incohérences sur le passage des astérisque.(remplacement de la dernière astérisque par tout ce qu'il y a dans le path courant!!)
Donc je me suis dit qu'il fallait que je trouve une expression régulière permetttant de faire cela mais il me semble que c'est impossible et ce malgré le temps que j'y ai passé!
J'ai trouvé un expression régulière similaire à la tienne mais elle est trop efficace.
Je veux dire par la qu'elle efface - celle que j'avais fait aussi - tout ce qui se trouve en *{ et }* alors qu'il faudrait qu'elle efface les lignes commencant par *{ et contenant *} et toutes celles entre qui commence pas *
En gros
titi
*loulou
{* blablaba
* bloblo
blibli
*toto
*}
tata
doit me rendre :
titi
*loulou
blibli
tata
Voila j'aurais du mettre un exemple plus parlant encore désolé. Je continue à chercher mais c'est pas gagner. Si quelqu'un a une idée que ce soit à l'aide d'une expression régulière avec un awk (que je connais pas) ou un sed ou un moyen que le read ne transforme pas les * de fin de ligne je pourrais réutiliser ceci
[code]
while read line
do
if test line = "*{" then
aenlever='O' else
if line = "*}" then
aenlever='N'
fi
case $line in
"\*{") # marche pas bien vu que caratère spécial unix astérisque et accolade!
aenlever='O'
aconserver = 'N'
;;
"\*}")
aenlever='N'
;;
"\*")
if test aenlever='O'then
aconserver = 'N'
else
aconserver = 'O'
fi
;;
)
aconserver = 'O'
;;
esac
if aenlever = 'N' and aconserver = 'O' then
echo $line > fichier-out.txt
fi
done <fichier.txt
[/code]
C'est pas gagné.
Encore merci
c
[^] # Re: Heu précise exactement ce que tu veux...
Posté par canardpc . En réponse au message Parcourir et modifier un fichier. Évalué à 1.
merci pour cette proposition mais je n'ai pas été assez clair sur mon problème et j'en suis désolé.
En fait j'avais commencé par faire un petit script, vu les besoins que j'avais, lisant ligne par ligne mais cela n'a pas fonctionner et je suis dans une impasse dans cette voie là à cause des tests d'égalités (une ligne contient "*{" pas forcement au début), je ne connais pas de matches en shell et surtout le read ligne à ligne engendrait des incohérences sur le passage des astérisque.(remplacement de la dernière astérisque par tout ce qu'il y a dans le path courant!!)
Donc je me suis dit qu'il fallait que je trouve une expression régulière permetttant de faire cela mais il me semble que c'est impossible et ce malgré le temps que j'y ai passé!
J'ai trouvé un expression régulière similaire à la tienne mais elle est trop efficace.
Je veux dire par la qu'elle efface - celle que j'avais fait aussi - tout ce qui se trouve en *{ et }* alors qu'il faudrait qu'elle efface les lignes commencant par *{ et contenant *} et toutes celles entre qui commence pas *
En gros
titi
*loulou
{* blablaba
* bloblo
blibli
*toto
*}
tata
doit me rendre :
titi
*loulou
blibli
tata
Voila j'aurais du mettre un exemple plus parlant encore désolé. Je continue à chercher mais c'est pas gagner. Si quelqu'un a une idée que ce soit à l'aide d'une expression régulière avec un awk (que je connais pas) ou un sed ou un moyen que le read ne transforme pas les * de fin de ligne je pourrais réutiliser ceci
[code]
while read line
do
if test line = "*{" then
aenlever='O' else
if line = "*}" then
aenlever='N'
fi
case $line in
"\*{") # marche pas bien vu que caratère spécial unix astérisque et accolade!
aenlever='O'
aconserver = 'N'
;;
"\*}")
aenlever='N'
;;
"\*")
if test aenlever='O'then
aconserver = 'N'
else
aconserver = 'O'
fi
;;
)
aconserver = 'O'
;;
esac
if aenlever = 'N' and aconserver = 'O' then
echo $line > fichier-out.txt
fi
done <fichier.txt
[/code]
C'est pas gagné.
Encore merci
c