geekosaur já explicou por que sua primeira tentativa falhou. Aqui estão algumas dicas adicionais sobre o que você está tentando fazer.
Se você estiver procurando por um número como 42
, provavelmente desejará corresponder 042
, mas não 1042
ou 421
. Tudo que você precisa para conseguir isso é uma expressão regular mais chique. Assumindo que $newnumber
contenha o número (inteiro, positivo, em notação decimal) sem zero à esquerda, procure por $newnumber
precedido pelo início da linha ou por um caractere não dígito, e da mesma forma depois. 0*
permite mais zeros à esquerda. A opção -E
diz a grep
que você está usando a sintaxe de expressão regular moderna (em oposição à sintaxe histórica, que é mais ousada e menos poderosa).
grep -E "(^|[^0-9])0*$newnumber(\$|^[0-9])" /path/to/file
Para analisar um número com potenciais zeros à esquerda, no bash, você pode usar $((10#$newnumber))
para forçar uma interpretação decimal. Em outras conchas, é um pouco mais complicado; há uma construção de shell para obter o valor de uma variável sem um prefixo específico ${var#prefix}
e uma construção semelhante para sufixos ${var%suffix}
, mas não é possível especificar "a sequência mais longa possível de 0
caracteres" como um prefixo para faixa. Mas isso pode ser feito em duas etapas: primeiro obtenha a parte de var
que não é o zeros à esquerda e use isso como um prefixo para remover. A parte de var
que não é o zeros à esquerda é seu sufixo mais longo que começa com um diferente de zero, que é ${var%%[!0]*}
(o duplo %
significa retirar o sufixo mais longo que corresponde ao padrão; %
eliminaria o sufixo mais curto).
read number
number=${number#${number%%[!0]*}}
Outra observação: grep REGEXP /some/file
pesquisa o arquivo /some/file
. Se você quiser pesquisar todos os arquivos em um diretório, deixe o shell gerar a lista de arquivos: grep REGEXP /some/dir/*
. Se você quiser pesquisar todos os arquivos em um diretório e seus subdiretórios recursivamente, passe a opção -r
para grep
para torná-la recursiva: grep -r REGEXP /some/dir
.