au sein d'une fonction, j'écris des lignes dans un fichier txt.
Cependant, le fichier a terme doit être traité sur une machine sous dos.
Donc je dois changer les terminaisons de ligne de LF vers CR+LF.
La sortie de ma fonction initialement était : (elle change les § en )
fonction()
{
....
echo "`echo "${Ligne}" | sed -e "s/§/\ /g"`"
}
qui me donne des terminaison de ligne en LF.
Sur le site de sed, j'ai vu dans cette page:
http://sed.sourceforge.net/sed1line.txt(...)
que en shell ksh (celui que j'utilise), je pouvais changer les LF en CR+LF avec:
# IN UNIX ENVIRONMENT: convert Unix newlines (LF) to DOS format
sed "s/$/`echo -e \\\r`/" # command line under ksh
Donc, j'ai essayé de changer ma sortie de fonction en:
echo "`echo "${Ligne}" | sed -e "s/§/\ /g" | sed "s/$/`echo -e \\\r`/"`"
mais l'imbrication des substitution de commandes `` pose probleme...
: s/$/: not found
: /: cannot execute
Si quelqu'un peut m'aider, merci beaucoup.
Note: je suis sous SunOS 5.9 en ksh et je ne suis pas interressé par une solution a base de perl... juste du ksh, merci (environnement de dev strict...)
# substitution de commande
Posté par totof2000 . Évalué à 4.
[^] # Re: substitution de commande
Posté par Paddle . Évalué à 1.
echo "$(echo "${LigneArticleFin}" | sed -e "s/§/\ /g" | sed "s/$/$(echo -e \\\r)/g")"
Par contre, les fins des lignes finissent du coup par "-e "... Là, je vois pas...[^] # Re: substitution de commande
Posté par Ramón Perez (site web personnel) . Évalué à 3.
C'est le echo -e.
Ton echo n'accepte pas l'option -e.
# simplifie
Posté par Ramón Perez (site web personnel) . Évalué à 4.
1/ Ton premier echo est inutile.
2/ Ton $ligne est une seule ligne, non ?
Si oui, le /g est inutile. Sinon il faut aussi un /g au 2e sed.
3/ je suppose que ce qui apparait comme '\ ' est un '\n' que templeet a mangé ?
Si oui, je n'en vois pas l'intérêt, les commande echo ou sed rajoutent automatiquement un \n à la fin de chaque ligne.
Donc il suffit de faire :
echo "${Ligne}" | sed "s/$/`echo -e \\\r`/"
[^] # Re: simplifie
Posté par Paddle . Évalué à 1.
[^] # Re: simplifie
Posté par Ramón Perez (site web personnel) . Évalué à 3.
Doù le /g
Ok, je n'avais pas compris ça.
> 3/ le '\ ' n'est pas un '\n', c'est pour remplacer par un espace le §
Dans ce cas, pas besoin de le backslasher.
> Je viens d'essayer ton code, j'ai toujours le '-e ' qui apparait...
Oui c'est normal, le sed que tu as trouvé sur la page web fonctionne pour une certaine version de ksh, sur un certain système. Mais pas chez toi, parce que ta commande echo comprend que le '-e' est quelque chose à afficher.
Donc essaye :
echo "${Ligne}" | sed "s/§/ /g" | sed "s/$/`echo \\\r`/"
# vous vous compliquer la vie
Posté par solsTiCe (site web personnel) . Évalué à 1.
2) pour taper le code d'un touche dans un shell, on tape ctrl-V puis on tappe la touche. Donc par exemple, ctrl+v +ENTREE donne ^M
donc ça devrait faire l'affaire
echo "${Ligne}" | sed -e 's/$/^M/'
j'ai remplacé le § par $ parce que je vois pas trop ce qu'il vient faire là !
enfin moi je teste ça sous bash mais ça devrait marché pareil sous ksh ...
[^] # patate et homard m'a tuer aussi
Posté par solsTiCe (site web personnel) . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.