Tengo una cadena como rev00000010
y solo quiero el último número, 10 en este caso.
He intentado esto:
TEST='rev00000010'
echo "$TEST" | sed '/^[[:alpha:]][0]*/d'
echo "$TEST" | sed '/^rev[0]*/d'
ambos no devuelven nada, aunque la expresión regular parece ser correcta (intentado con regexr )
sed
regular-expression
Michael Niemand
fuente
fuente
Respuestas:
Los comandos que pasó
sed
significan: si una línea coincide con la expresión regular, elimínela . Eso no es lo que quieres.Esto significa: en cada línea, elimine revoluciones seguido de cualquier número de ceros.
Además, no necesitas
sed
una cosa tan simple. Simplemente use bash y su expansión de parámetros :fuente
POSIXY:
Eliminaría todos los elementos a la izquierda del dígito más a la izquierda que no sea cero.
Bournely / universalmente:
fuente
test='rev 003A0.1056'
produciránumber="3A0.1056"
. El segundo se romperá en cualquier espacio, producirá el mismo valor:003A0.1056
desde el expr.Si ya tiene la prueba TEST variable, simplemente imprímala con todas las letras eliminadas
o
No utilice
%d
niecho
ordene porque los números con los principales0
se entienden comooctal
fuente
Algunas opciones más (aunque también le recomiendo que use la expansión de parámetros como lo sugiere @choroba):
Use
sed
operl
para reemplazar todo excepto los dos últimos caracteres con los dos últimos caracteres. Esto elimina efectivamente todo excepto los dos últimos.Establezca
awk
el delimitador de campo en 2 o más 0s e imprima el último campo:Extraiga solo los dos últimos caracteres:
Imprima solo los últimos 10 bytes:
Tenga en cuenta que todo el uso anterior,
<<<$var
que es una construcción bash. Para usarlo en otros proyectiles, cambie aecho "$TEST" | command
.fuente
awk -F"[a-z]" '{print +$NF}'
Para obtener el "último número", seleccione cualquier secuencia de dígitos al final de la cadena y conviértala en un número decimal:
Con Bash:
Con grep:
fuente