Или вместо того, чтобы делать это в одном grep, используйте один grep для поиска файлов с 3 или более семерками, а другой - для фильтрации 4 или более семерок.
ls -f | egrep '7.*7.*7' | grep -v '7.*7.*7.*7'
Вы можете переместить часть работы в шарообразную оболочку с помощью более короткого
ls -f *7*7*7* | grep -v '7.*7.*7.*7'
хотя, если есть большое количество файлов, соответствующих этому шаблону, последний не будет работать из-за встроенных ограничений на размер глобуса.
«-f» в «ls» предотвращает сортировку результатов «ls». Если в каталоге огромное количество файлов, то время сортировки может быть довольно заметным.
Этот двухэтапный процесс фильтрации, я думаю, более понятен, чем использование шаблонов [^7].
Кроме того, вот решение в виде скрипта Python, поскольку вы просили об этом в качестве опции.
import os
for filename in os.listdir("."):
if filename.count("7") == 4:
print filename
Это будет обрабатывать несколько случаев, которые не будут выполняться командами оболочки, например (злые) имена файлов, которые содержат символ новой строки. Хотя даже здесь вывод в этом случае, вероятно, все равно будет неправильным или, по крайней мере, не подготовленным для нижестоящих программ.
person
Andrew Dalke
schedule
12.03.2009