[shell] comment retirer les ^M dans une variable

comment retirer les ^M dans une variable [shell] - Shell/Batch - Programmation

Marsh Posté le 01-09-2011 à 13:16:39    

Bonjour,
 
Je sais supprimer les ^M dans un fichier avec une commande du type :
 
cat fichier_avec_^M |tr -d "\r" > fichier_sans_^M
 
Par contre je n'arrive pas à supprimer le ^M dans une variable, que cela soit en passant par tr ou sed, ou tout simplement par ksh.
 
exemple : version=1.2.3.4^M
 
echo $version
1.2.3.4^M
 
Normalement ceci devrait marcher :
 
version=$(eval echo ${version##*^M}); // récupère la plus grande partie d'une chaîne coupée en 2 via le séparateur "^M"
 
Cette synthaxe fonctionne pourtant pour transformer par exemple "Toto est parti à la maison" en "Toto est parti " avec "à" comme séparateur.
 
Quelqu'un aurait la synthaxe exacte s'il vous plaît ? je galère sur un truc nul ... je sais :-(
 
Merci par avance.

Reply

Marsh Posté le 01-09-2011 à 13:16:39   

Reply

Marsh Posté le 01-09-2011 à 13:42:12    

romegonic2011 a écrit :

Bonjour,

 

Je sais supprimer les ^M dans un fichier avec une commande du type :

 

cat fichier_avec_^M |tr -d "\r" > fichier_sans_^M

 

Essaie plutôt :

dos2unix fichier fichier

 


romegonic2011 a écrit :

Par contre je n'arrive pas à supprimer le ^M dans une variable, que cela soit en passant par tr ou sed, ou tout simplement par ksh.

 

exemple : version=1.2.3.4^M

 

echo $version
1.2.3.4^M

 

Normalement ceci devrait marcher :

 

version=$(eval echo ${version##*^M}); // récupère la plus grande partie d'une chaîne coupée en 2 via le séparateur "^M"

 

Cette synthaxe fonctionne pourtant pour transformer par exemple "Toto est parti à la maison" en "Toto est parti " avec "à" comme séparateur.

 

Quelqu'un aurait la synthaxe exacte s'il vous plaît ? je galère sur un truc nul ... je sais :-(

 

Merci par avance.

 

"^M" ne s'écrit pas "^" + "M", c'est un caractère spécial que tu peux obtenir avec la séquence de touches Ctrl+V Ctrl+M

 

et du coup :

foo=abcd[Ctrl+V Ctrl+M]
echo $foo > bar
vi bar   <==== on voit clairement abcd^M
echo $foo | sed 's/^M//' > bar   <= avec ^M tapé en utilisant [Ctrl+V Ctrl+M]
vi bar  <=== plus de ^M

 

Ou plus simple, avec PERL :

echo $foo | perl -pe 's/\r//;' > bar


Message édité par Elmoricq le 01-09-2011 à 13:43:56
Reply

Marsh Posté le 01-09-2011 à 15:55:20    

Bonjour Elmoricq,
 
Pour le fichier et dos2unix, en effet cela fonctionne aussi, sauf sur une machine / un OS ou dos2unix n'existe pas :
ksh: dos2unix:  not found
(d'où le cat ..)
 
Par contre merci pour les explications concernant ^M, et comme je manipule une variable et que je n'ai pas envie d'un fichier temporaire, ta commande perl me plaît bien.
 
Merci pour la célérité et la qualité de la réponse.
 
Sujet résolu :-)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed