Salut,
j'ai une chaine:
SNMPv2-SMI::enterprises.3582年1月1日.3.1.7.0.0.0
je voudrais la renverser, pour recuperer le 0 à la fin. Le probleme c'est que je ne peux pas utiliser tr car la j'ai du texte, mais c'est pas forcement toujours le cas suivant les machines. Donc la solution que je trouve la plus pratique est d'inverser la chaine, de faire un cut -d "." -f1 pour recuprer la derniere valeur (qui n'est pas forcement 0).
sort joue seulement avec des lignes et pas avec des caractères donc je ne sais pas comment y arriver. Il faudrait que ca reste en bash (je pourrais utiliser du perl ou autre mais je ne prefere pas).
Est ce que quelqu'un à une idée ? Connait une option miracle ?
Merci d'avance !
Forum Programmation.shell Inverser une chaine de caractères
Posté par DjinnS .
Étiquettes :
aucune
17
juin
2005
# OK OK OK
Posté par DjinnS . Évalué à 4.
;)
[^] # Re: OK OK OK
Posté par chtitux (site web personnel) . Évalué à 2.
echo SNMPv2-SMI::enterprises.3582年1月1日.3.1.7.0.0.0 | rev | cut -c -1
(prends le dernier caractere de la chaîne)
# Pourquoi la renverser ?
Posté par netsurfeur . Évalué à 3.
sed fait ça très bien
echo SNMPv2-SMI::enterprises.3582年1月1日.3.1.7.0.0.0 | sed 's/.*\.\([0-9]*\)$/1円/'
0
Ca évite en plus de devoir inverser le résultat s'il est supérieur à 9
[^] # Re: Pourquoi la renverser ?
Posté par tgl . Évalué à 3.
% plop="SNMPv2-SMI::enterprises.3582年1月1日.3.1.7.0.0.0"
% echo ${plop##*.}
0
(question de goût, mais c'est vraiment infiniment plus rapide si jamais il y a beaucoup de lignes à traiter en boucle)
[^] # Oui en bash ( forme générale )
Posté par Frederic Brugmans . Évalué à 1.
brol="SNMPv2-SMI::enterprises.3582年1月1日.3.1.7.0.0.0"
echo ${brol:${#brol}-1:1}
[^] # Re: Oui en bash ( forme générale )
Posté par tgl . Évalué à 2.
% echo "${plop#${plop%?}}"
C'est donc "la chaine privée d'un préfixe qui correspond à la chaine privée de son dernier caractère".
Et puis aussi, en Bash-3 avec une regexp, pour garder tous les derniers chiffres si c'est bien par des chiffres que la chaine termine :
% [[ "${plop}" =~ "[0-9]+$" ]] && echo "${BASH_REMATCH}"
(pratique parceque tu peux en même temps gérer les chaines incorrectes avec un if/then/else)
Bref, que de solutions... :)
# man tail ?
Posté par doublehp . Évalué à 0.
?
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.