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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [bash] modifier casse d'une chaine

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[bash] modifier casse d'une chaine

n°1342248
nonocrack
Posté le 09-04-2006 à 00:25:02  profilanswer
 

bonjour à tous,
 
je souhaiterais comment changer la casse d'une chaine, et meme plus précisément d'un caractère d'une chaine.
je ne sait pas si une fonction fait déja sa ou pas mais j'ai pas trouvé grand chse et je suis vraiment débutant en bash.
le but serait de pouvoir changer dans le script la casse d'un mot passé en paramètre.
genre avec un appel monscript pArAmEtRe
que dans le script j'arrive à Parametre par exemple, ou a PARAmetre
c'est pour mettre en évidence certaines parties de mots.
 
je vous remercie

mood
Publicité
Posté le 09-04-2006 à 00:25:02  profilanswer
 

n°1342255
nargy
Posté le 09-04-2006 à 00:35:34  profilanswer
 

méthode bourrin:
utiliser ``tr`` pour mettre tout en majuscule ou tout en minuscule:

Code :
  1. echo coucou | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'


 
Pour plus de précision, utiliser ``awk``:

Code :
  1. echo coucou | awk '{ print toupper(substr($0,0,3)) substr($0,4) }'


 
awk est un mini language de traitement par ligne.
 
Pour les puristes d'unix, utiliser ``sed`` (désolé, pas d'exemple).
 
Se reporter aux pages de manuel pour plus d'infos sur ces commandes.

Message cité 1 fois
Message édité par nargy le 09-04-2006 à 00:36:08
n°1342319
couak
Posté le 09-04-2006 à 10:33:06  profilanswer
 

autre solution :

Code :
  1. echo "coucou" | tr '[[:lower:]]' '[[:upper:]]'

n°1342344
Sve@r
Posté le 09-04-2006 à 12:32:27  profilanswer
 

nargy a écrit :

Pour les puristes d'unix, utiliser ``sed`` (désolé, pas d'exemple).


Je vois pas en quoi utiliser "sed" est plus "puriste" que "tr" ou "awk"...
 
Un bon unixien est un unixien qui utilise l'outil qu'il faut là où il faut. Et entre les deux instructions suivantes
echo $var | sed -e "s/a/A/g" -e "s/b/B/g" -e "s/c/C/g" -e "s/d/D/g" -e ... -e "s/z/Z/g"
echo $var |tr '[a-z]' '[A-Z]'
Pour moi, il n'y a pas photo sur l'outil que je choisirai...


Message édité par Sve@r le 09-04-2006 à 12:33:15

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1342407
nonocrack
Posté le 09-04-2006 à 14:56:58  profilanswer
 

merci beaucoup de vos réponses !
je vais pouvoir continuer mon petit script :)

n°1342444
nargy
Posté le 09-04-2006 à 16:54:33  profilanswer
 

Citation :

Un bon unixien est un unixien qui utilise l'outil qu'il faut là où il faut. Et entre les deux instructions suivantes
echo $var | sed -e "s/a/A/g" -e "s/b/B/g" -e "s/c/C/g" -e "s/d/D/g" -e ... -e "s/z/Z/g"
echo $var |tr '[a-z]' '[A-Z]'
Pour moi, il n'y a pas photo sur l'outil que je choisirai...


 
Comme quoi tu ne connait pas sed, il est tout à fait possible de faire aussi court qu'avec awk, mais tu ne me fera pas ouvrir la doc de sed pour que je te le prouve! :D

Message cité 1 fois
Message édité par nargy le 09-04-2006 à 16:54:46
n°1342528
Sve@r
Posté le 09-04-2006 à 21:11:44  profilanswer
 

nargy a écrit :

Citation :

Un bon unixien est un unixien qui utilise l'outil qu'il faut là où il faut. Et entre les deux instructions suivantes
echo $var | sed -e "s/a/A/g" -e "s/b/B/g" -e "s/c/C/g" -e "s/d/D/g" -e ... -e "s/z/Z/g"
echo $var |tr '[a-z]' '[A-Z]'
Pour moi, il n'y a pas photo sur l'outil que je choisirai...


 
Comme quoi tu ne connait pas sed, il est tout à fait possible de faire aussi court qu'avec awk, mais tu ne me fera pas ouvrir la doc de sed pour que je te le prouve! :D


 
Je connais très bien sed (qui est l'équivalent en ligne de "ed" sur lequel est basé "vi"...) mais j'ai beau chercher... je ne vois pas comment faire mieux que ma première instance...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1342552
nargy
Posté le 09-04-2006 à 21:55:58  profilanswer
 

echo coucou | sed -e 's/\(.\{3\}\)/\U\1/'
-> COUcou

n°1342589
couak
Posté le 09-04-2006 à 22:24:06  profilanswer
 

ouais bah franchement c'est de la masturbation de cerveaux
il vaut mieux faire au plus simple et le plus lisible possible

n°1342593
nargy
Posté le 09-04-2006 à 22:28:04  profilanswer
 

j'avais prévenu

mood
Publicité
Posté le 09-04-2006 à 22:28:04  profilanswer
 

n°1343755
Sve@r
Posté le 11-04-2006 à 08:02:54  profilanswer
 

nargy a écrit :

echo coucou | sed -e 's/\(.\{3\}\)/\U\1/'
-> COUcou


 
"backslash U" => je connaissais pas !!!
Joli. J'ai appris un truc de plus.  :jap:  
 
Mais malgré ça je préfère mon petit "tr"...  :)  


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

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

  [bash] modifier casse d'une chaine

 

Sujets relatifs
supprimer le n eme espace d'une chainemodifier une image
Batch windows - Supprimer/modifier une ligne d'un fichier[Résolu] Exploser une chaine
Redimensionnement à la chaine d'imageModifier un champ en fonction de la date
[Algo] Recherche de sous chaîneModifier une partie de fichier son avec jmf
[ RESOLU ] chercher dans une chaine de caractèreProbleme pour Modifier mon formulaire
Plus de sujets relatifs à : [bash] modifier casse d'une chaine


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