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.