grep -E '^[^0-9]*1234([^0-9]+1234)*[^0-9]*$' file.txt
^[^0-9]*1234
: найти первое совпадение 1234
, которому могут предшествовать нецифровые символы. ([^0-9]+1234)*
: могут быть дальнейшие итерации 1234
, но они должны быть отделены от первых 1234
(и других 1234
) нецифровыми символами (поэтому используйте +
). [^0-9]*$
: соответствует всей строке (с $
). После финала 1234
могут быть нецифровые символы (но не обязательно, следовательно *
). Если 1234
должны быть разделены пробелами (или находиться в начале или в конце строки), то используйте
grep -E '^([^0-9]* )?1234(( [^0-9]*)? 1234)*( [^0-9]*)?$'
^([^0-9]* )?
: в начале могут быть нецифровые символы, если они заканчиваются пробелом. 1234
: найти первое (необходимое) совпадение 1234
. (( [^0-9]*)? 1234)*
: Я проработаю скобки в обратном порядке. Могут быть (ноль или больше) дополнительные копии 1234
, но им должен предшествовать пробел, т.е. 1234
. Перед этим пробелом могут стоять нецифровые символы, что нормально, если они отделены от предыдущей копии 1243
другим пробелом, т.е. ( [^0-9]*)?
. ( [^0-9]*)?$
: в конце могут быть нецифровые символы, если им предшествует пробел.