Bonjour,
Je suis en train de travailler sur un shell qui prend un fichier et le remet en forme.
L'idée de fond c'est de mettre le fichier dans une variable
de faire une suite de traitement sur cette variable et pour finir
de faire un echo de ma variable pour voir le resultat ou le mettre dans un fichier
les traitement utilisés sont des sed,grep,tr et sort
Le temps premiers traitement est de tout mettre sur une seul ligne grace à un tr -s '\r\n' ' '
puis ensuite grace à des sed j'insère les retour chariot au bon endroit
et la il y a qqchose qui cloche!!!
Pour mieux comprendre ,voici un exemple de code , l'idée est relativement simpliste puisqu'elle consiste a mettre des sauts de lignes avant le mot ligne
01: #!/bin/sh
02: texte=ligne1ligne2ligne3
03:
04: echo "-------"
05: echo $texte
06:
07: echo "-------"
08: echo $texte | sed s/'ligne'/'\r\nligne'/g
09:
10: echo "-------"
11: texte=$(echo $texte | sed s/'ligne'/'\r\nligne'/g)
12: echo $texte
resultat (avec vi) :
-------
ligne1ligne2ligne3
-------
^M
ligne1^M
ligne2^M
ligne3
-------
^M ligne1^M ligne2^M ligne3
Ce que je ne comprends pas dans cette execution c'est pourquoi à la ligne 08 j'obtiens bien des lignes distinctes pour chaque mot
ligne
alors qu'avec les lignes 11 et 12 tout se trouve sur la même ligne se qui me privent de l'utilisation des
grep.
A première vue le problème ne vient pas du
sed puisqu'il se fait comme il faut en ligne 08, mais plutôt du passage par la variable
texte
Si quelqu'un à une idée......
NB : j'ai déjà essayé :
. de remplacer le '\r\n' par '\n\r' , '\r' et '\n'
. de mettre echo -e
. et de remplcer $(.....) par des côtes inversées
Configuration: Windows XP
Firefox 2.0.0.6