Регулярное выражение, которое вы ищете:
^(?!(?:.*?0){6,})(?=(?:.*?0){3,})[0-9]+$
Входной файл:
cat file.txt
20001
200134
20103040
203004038002
Команда:
Чтобы использовать регулярное выражение, я использую grep -P
, потому что обратная запись (?!
не поддерживается в egrep
grep -P '^(?!(?:.*?0){6,})(?=(?:.*?0){3,})[0-9]+$' file.txt
20001
20103040
Объяснение: Сначала я использую отрицательный взгляд, чтобы убедиться, что вы не можете набрать более шести символов 0
в любом месте строки. После этого я использую положительный прогноз, чтобы убедиться, что строка должна содержать не менее 3 символов 0
.
^
- начало строки. И $
- это конец строки.