[bash] modifier casse d'une chaine

modifier casse d'une chaine [bash] - Shell/Batch - Programmation

Marsh Posté le 09-04-2006 à 00:25:02    

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

Reply

Marsh Posté le 09-04-2006 à 00:25:02   

Reply

Marsh Posté le 09-04-2006 à 00:35:34    

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
Reply

Marsh Posté le 09-04-2006 à 10:33:06    

autre solution :

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

Reply

Marsh Posté le 09-04-2006 à 12:32:27    

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.
Reply

Marsh Posté le 09-04-2006 à 14:56:58    

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

Reply

Marsh Posté le 09-04-2006 à 16:54:33    

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
Reply

Marsh Posté le 09-04-2006 à 21:11:44    

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.
Reply

Marsh Posté le 09-04-2006 à 21:55:58    

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

Reply

Marsh Posté le 09-04-2006 à 22:24:06    

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

Reply

Marsh Posté le 09-04-2006 à 22:28:04    

j'avais prévenu

Reply

Marsh Posté le 09-04-2006 à 22:28:04   

Reply

Marsh Posté le 11-04-2006 à 08:02:54    

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.
Reply

Sujets relatifs:

Leave a Replay

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