Eu posso responder com o comando grep
:
Arquivo de entrada:
9228 Hello 8473 World War 1 1914-1918 Hello 8391 World War 2 1939-1945
Comando:
grep -Eo '\<[0-9]{4}\>' file |tr '\n' ' '
Retorna qualquer número com tamanho = 4.
-E
muda para regex estendido
-o
imprime apenas a parte correspondente
Saída:
9228 8473 1914 1918 8391 1939 1945
Atualizar resposta:
Arquivo de entrada:
9228 Hello 8473 World War 1 1914-1918 Hello 8391 World War 2 1939-1945
foo1234bar
a1111
12345
0x2222ff
1.3333
2.54321
Comando
grep -oP '(?<![0-9])[0-9]{4}(?![0-9])' file | tr '\n' ' '
grep com lookbehind negativo / lookahead:
(?<![0-9])[0-9]{4}
(lookbehind negativo): corresponde a números com comprimento = 4 que não é precedido por um número [0-9]
.
[0-9]{4}(?![0-9])
(lookahead negativo): corresponde a um número = 4 não seguido por um número .
Saída:
9228 8473 1914 1918 8391 1939 1945 1234 1111 2222 3333