Você também pode fazer isso usando o seguinte método:
$ sed -n "/^[0-9]\{0,4\}$\|10000/p" logfile
Exemplo
Digamos que eu tenha um arquivo de amostra, logfile
, assim:
$ seq 9900 10050 | sed 's/$/ /' > logfile
Isso resulta no arquivo logfile
com esta aparência:
$ head -5 logfile
9900
9901
9902
9903
9904
$ tail -5 logfile
10046
10047
10048
10049
10050
Há um espaço à direita depois de cada uma dessas linhas, graças à linha sed 's/$/ /'
acima, quando criamos o arquivo de amostra.
Agora, quando executarmos o comando sed
acima:
$ sed -n "/^[0-9]\{1,4\}[^0-9]\|10000/p" logfile | tail -5
9996
9997
9998
9999
10000
Recebemos tudo até 10000 e nada mais.
Como funciona
O sed
acima trabalha localizando linhas que começam com um intervalo de dígitos, 0-9, com comprimento entre 1 até 4. A notação para sed
, "/^[0-9]\{1,4\}[^0-9]
executa essa parte. A notação [^0-9]
no final diz caracteres que não são 0-9. Isso interrompe sed
de substrings correspondentes em números maiores.
O \|10000
corresponde a 10000, já que é um padrão único em comparação com o restante das strings. O trailing p
informa sed
para imprimir os resultados.
Usando o grep como alternativa
O uso de sed
não é realmente a ferramenta certa para pesquisar. Provavelmente, é melhor usar grep
para isso.
$ grep "\b\([0-9]\{1,4\}\|10000\)\b" logfile | head -5
9900
9901
9902
9903
9904
$ grep "\b\([0-9]\{1,4\}\|10000\)\b" logfile | tail -5
9996
9997
9998
9999
10000
O texto acima encontrará todas as linhas que contêm uma cadeia de dígitos que são 10000 ou inferiores. O \b
denota uma borda antes ou depois da string.