Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
759 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [shell] comment retirer les ^M dans une variable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[shell] comment retirer les ^M dans une variable

n°2098992
romegonic2​011
Posté le 01-09-2011 à 13:16:39  profilanswer
 

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.

mood
Publicité
Posté le 01-09-2011 à 13:16:39  profilanswer
 

n°2099001
Elmoricq
Modérateur
Posté le 01-09-2011 à 13:42:12  profilanswer
 

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
n°2099032
romegonic2​011
Posté le 01-09-2011 à 15:55:20  profilanswer
 

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 :-)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [shell] comment retirer les ^M dans une variable

 

Sujets relatifs
fonction exec ou shell_exec lancer depuis un navigateur[Shell-AIX] conversion PDF en TXT
[VBA]: variable static initialisation[JS] Portée d'une variable, comprends pas
[Shell/Batch] Mise à jour de l'annuaire ADTester si une variable est vide dans un .bat
comment transférer une variable vers une autre page[SQL] Resultat requete dans une variable
[Javascript] Définir un attribut à l'aide d'une variableLimiter la porté d'une variable en emacs lisp
Plus de sujets relatifs à : [shell] comment retirer les ^M dans une variable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR