Insertion d'un retour chariot dans une chaine
thufenn
-
jipicy Messages postés 41342 Statut Modérateur -
jipicy Messages postés 41342 Statut Modérateur -
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
resultat (avec vi) :
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
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
A voir également:
- Insertion d'un retour chariot dans une chaine
- Touche insertion clavier - Guide
- Insertion sommaire word - Guide
- Insertion liste déroulante excel - Guide
- Chaine tnt gratuite sur mobile - Guide
- Insertion signature word - Guide
1 réponse
Salut,
Il faut changer la valeur de la variable "IFS" (Input Field Separator) avant la commande "echo" :
Il faut changer la valeur de la variable "IFS" (Input Field Separator) avant la commande "echo" :
10: echo "-------" 11: texte=$(echo $texte | sed s/'ligne'/'\r\nligne'/g) 12: OLD_IFS=$IFS 13: IFS=" " 14: echo $texte 15: IFS=$OLD_IFSUn bon moyen pour te rendre compte, rajoute la ligne :
set -xven début de script pour déboguer ton script et voir comment les variables sont interprétées ;-))