[bash] Compte le nombre de caractères ds 1 variable ?

Compte le nombre de caractères ds 1 variable ? [bash] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 25-04-2005 à 00:20:27    

voilou tout est dans le titre, comment compter le nombre de caractères dans une variable ?
vous allez me dire qu'il y a wc -c  
 
echo $var | wc -c, mais n'y aurait il pas une autre manière de le faire, par exemple avec sed ?
 
De plus, comment faire une recherche de caracères dans une chaine de caracères ?
 
je sais qu'en bidouillant avec grep, on peut faire ca  
 
echo $var | grep -cn "#", mais n'y aurait il pas moyen de le faire plus elegemment ?

Reply

Marsh Posté le 25-04-2005 à 00:20:27   

Reply

Marsh Posté le 25-04-2005 à 18:30:58    

${#var} est le nombre de caracteres dans var : http://www.gnu.org/software/bash/m [...] html#SEC29
 
Pour ton autre question c'est difficile de repondre si on ne sait pas ce que tu cherches a faire, mais ${parameter#word} ou ${parameter%word} ou ${parameter/pattern/string} (ou leurs variantes ##, %% et //) font surement ce que tu veux.


Message édité par matafan le 25-04-2005 à 18:33:12
Reply

Marsh Posté le 25-04-2005 à 23:21:56    

matafan a écrit :

${#var} est le nombre de caracteres dans var : http://www.gnu.org/software/bash/m [...] html#SEC29
 
Pour ton autre question c'est difficile de repondre si on ne sait pas ce que tu cherches a faire, mais ${parameter#word} ou ${parameter%word} ou ${parameter/pattern/string} (ou leurs variantes ##, %% et //) font surement ce que tu veux.


 
 
merci pour {#var}, c'est exactement ca que je cherchais  
 
sinon pour les autres propositions, je me suis rensigné, j'ai d'ailleurs trouvés des exemples car les explications sont imbitables :
http://www.zone-h.org/files/48/bash.txt
 
les expressions regulières que tu me proposes permet de cherches des sous chaines à partir d'une chaine ou de remplacer une sous chaine d'une chaine par une autre sous chaine ...
 
Bref , j'ai bien compris mais cela ne repond pas à ma question ...
je me reexplique alors  
 
Comment fait t'on pour controler que la chaine de caractères ne contient que des caracères alphanumériques et ne contiennent pas plus de 8 caractères ?
 
exemple p="tototi"

Reply

Marsh Posté le 26-04-2005 à 14:33:31    

if echo $var | grep -Eq '^[[:alnum:]]{8}$'
then
    ...
fi


A part ça je ne vois pas trop.


Message édité par matafan le 26-04-2005 à 14:34:30
Reply

Marsh Posté le 26-04-2005 à 23:30:01    

Salut,
Ca ne devrait pas être {0,8} ? Pour permettre moins de 8 caractères, si j'ai bien compris ?

Reply

Marsh Posté le 26-04-2005 à 23:48:05    

je ne sais pas si c'est normal mais :
echo "totto" | grep -qE "^[[:alnum:]]{0.8}$", n'affiche rien
 
et  echo "tot#to" | grep -qE "^[[:alnum:]]{0.8}$", n'affche rien non plus  
 
matafan, dans ton if tu fais un test sur quoi, normallement il n'y a pas 2 argument, non ?  
 

Reply

Marsh Posté le 26-04-2005 à 23:48:29    

IrmatDen, tu as peut etre raison en effet ...

Reply

Marsh Posté le 27-04-2005 à 05:26:17    

IrmatDen a écrit :

Salut,
Ca ne devrait pas être {0,8} ? Pour permettre moins de 8 caractères, si j'ai bien compris ?


Oui en effet, j'ai mal lu ce qu'il demandait.
 

weed a écrit :

je ne sais pas si c'est normal mais :
echo "totto" | grep -qE "^[[:alnum:]]{0.8}$", n'affiche rien
 
et  echo "tot#to" | grep -qE "^[[:alnum:]]{0.8}$", n'affche rien non plus


Si tu fais "man grep" tu verra que -q supprime tout affichage. grep réussit si ça match (return code 0), et échoue si ça ne match pas (return code différent de 0).
 

weed a écrit :

matafan, dans ton if tu fais un test sur quoi, normallement il n'y a pas 2 argument, non ?


Le test est sur la valeur de retour de la commande qui est après le if.


Message édité par matafan le 27-04-2005 à 05:26:54
Reply

Marsh Posté le 27-04-2005 à 22:11:33    

oki je ne savais pas que l'on pouvait traiter directement de cette facon avec un if ...
 
alors explique moi pourquoi cela n'affiche pas ok quand je lance, cette commande. Ca match bien et ca affiche "pas ok". Moins de 8 caracères et tous alphanumérique.
 

if echo "totto" | grep -E "^[[:alnum:]]{0.8}$"; then echo "ok"; else echo "pas ok"; fi
fi


 
si je fais ca  
 

Code :
  1. if echo "tottojhgjhgjdddddddddddddddddhgjhgjhg" | grep -qE "^[[:alnum:]]{0.8}$"; then echo "ok"; else echo "pas ok"; fi
  2. ou
  3. if echo "tottojhgj#hg" | grep -qE "^[[:alnum:]]{0.8}$"; then echo "ok"; else echo "pas ok"; fi


 
 
cela n'affiche toujours, rien, c'est normal puisque c'est faut. Mais alors pourquoi cela renvoie toujours pas ok ?

Reply

Marsh Posté le 28-04-2005 à 00:55:07    

Parce que c'est "{0,8}" et pas "{0.8}".

Reply

Marsh Posté le 28-04-2005 à 00:55:07   

Reply

Marsh Posté le 28-04-2005 à 01:08:19    

et bien bravo. Cela fonctionne merci.

Reply

Sujets relatifs:

Leave a Replay

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