J'ai une chaîne comme rev00000010
et je ne veux que le dernier numéro, 10 dans ce cas.
J'ai essayé ceci:
TEST='rev00000010'
echo "$TEST" | sed '/^[[:alpha:]][0]*/d'
echo "$TEST" | sed '/^rev[0]*/d'
les deux ne renvoient rien, bien que l'expression régulière semble être correcte (essayé avec regexr )
sed
regular-expression
Michael Niemand
la source
la source
Réponses:
Les commandes que vous avez passées
sed
signifient: si une ligne correspond à l'expression régulière, supprimez-la . Ce n'est pas ce que tu veux.Cela signifie: sur chaque ligne, supprimez rev suivi de n'importe quel nombre de zéros.
De plus, vous n'avez pas besoin
sed
d'une chose aussi simple. Utilisez simplement bash et son extension de paramètre :la source
POSIX:
Supprime tout à gauche du chiffre non nul le plus à gauche.
Bournely / universellement:
la source
test='rev 003A0.1056'
produiranumber="3A0.1056"
. La seconde se cassera sur n'importe quel espace, la même valeur produira: à003A0.1056
partir de l'expr.Si vous avez déjà la variable TEST, imprimez-la avec toutes les lettres supprimées
ou
Ne pas utiliser
%d
ouecho
-commander parce que les chiffres avec des interlignes0
sont compris commeoctal
la source
Quelques options supplémentaires (bien que je vous recommande également d'utiliser l'extension des paramètres comme suggéré par @choroba):
Utilisez
sed
ouperl
pour tout remplacer sauf les deux derniers caractères par les deux derniers caractères. Cela supprime efficacement tout sauf les deux derniers.Définissez
awk
le délimiteur de champ de 2 ou plusieurs 0 et imprimez le dernier champ:Extraire uniquement les deux derniers caractères:
Imprimer uniquement les 10 derniers octets:
Notez que tout ce qui précède utilise
<<<$var
une construction bash. Pour l'utiliser dans d'autres coques, passez àecho "$TEST" | command
.la source
awk -F"[a-z]" '{print +$NF}'
Pour obtenir le "dernier nombre", sélectionnez une séquence de chiffres à la fin de la chaîne et convertissez-la en nombre décimal:
Avec Bash:
Avec grep:
la source