Eu tenho uma string como rev00000010
e só quero o último número, 10 neste caso.
Eu tentei isso:
TEST='rev00000010'
echo "$TEST" | sed '/^[[:alpha:]][0]*/d'
echo "$TEST" | sed '/^rev[0]*/d'
ambos não retornam nada, embora o regex pareça estar correto (tentado com regexr )
sed
regular-expression
Michael Niemand
fonte
fonte
Respostas:
Os comandos que você passou para
sed
significar: se uma linha corresponder ao regex, exclua-o . Não é isso que você quer.Isso significa: em cada linha, remova rev seguida por qualquer número de zeros.
Além disso, você não precisa
sed
de uma coisa tão simples. Basta usar o bash e sua expansão de parâmetro :fonte
POSIXly:
Removeria tudo à esquerda do dígito diferente de zero, à esquerda.
Bournely / universalmente:
fonte
test='rev 003A0.1056'
será produzidonumber="3A0.1056"
. O segundo quebrará em qualquer espaço, o mesmo valor produzirá: a003A0.1056
partir do expr.Se você já possui a variável TEST, imprima-a com todas as letras removidas
ou
Não use
%d
ouecho
comando porque os números com iniciais0
são entendidos comooctal
fonte
Mais algumas opções (embora eu também recomendo que você use a Expansão de parâmetros, conforme sugerido por @choroba):
Use
sed
ouperl
para substituir tudo, exceto os dois últimos caracteres pelos dois últimos. Isso efetivamente exclui tudo, exceto os dois últimos.Defina
awk
o delimitador de campo como 2 ou mais 0s e imprima o último campo:Extraia apenas os dois últimos caracteres:
Imprima apenas o décimo último bytes:
Observe que todos os itens acima usam
<<<$var
uma construção bash. Para usá-lo em outras conchas, mude paraecho "$TEST" | command
.fonte
awk -F"[a-z]" '{print +$NF}'
Para obter o "último número", selecione qualquer sequência de dígitos no final da string e converta-a em um número decimal:
Com o Bash:
Com grep:
fonte