grep -E '^[^0-9]*1234([^0-9]+1234)*[^0-9]*$' file.txt
Explicação
-
^[^0-9]*1234
: encontre a primeira correspondência de1234
, que pode ser precedida por caracteres não dígitos. -
([^0-9]+1234)*
: pode haver mais iterações de1234
, mas elas devem ser separadas do primeiro1234
(e outros1234
) por caracteres não dígitos (portanto use+
). -
[^0-9]*$
: corresponde à linha inteira (com$
). Pode haver caracteres não dígitos após o1234
final (mas não necessariamente, portanto,*
).
EDITAR
Se 1234
precisar ser delimitado por espaços (ou estar no início ou no final da linha), use
grep -E '^([^0-9]* )?1234(( [^0-9]*)? 1234)*( [^0-9]*)?$'
Explicação
-
^([^0-9]* )?
: pode haver caracteres não dígitos para começar, contanto que eles terminem com um espaço. -
1234
: encontre a primeira correspondência (obrigatória) de1234
. -
(( [^0-9]*)? 1234)*
: Eu vou trabalhar com os parênteses para trás. Pode haver (zero ou mais) cópias adicionais de1234
, mas elas devem ser precedidas por um espaço, ou seja,1234
. Antes desse espaço, pode haver caracteres não dígitos, o que é bom contanto que eles sejam separados da cópia anterior de1243
por outro espaço, ou seja,( [^0-9]*)?
. -
( [^0-9]*)?$
: pode haver caracteres não dígitos para terminar, desde que sejam precedidos por um espaço.