#bash
#bash
Вопрос:
я ищу поиск в каталоге …
a2010-02-10
как выполнить поиск по каталогу ls all в формате с датой
ls -d *(d )-(d )-(d )
это работает не так, как perl
какой формат правильный
Ответ №1:
Ваше регулярное выражение кажется правильным, но bash не поддерживает полные регулярные выражения. Он поддерживает подстановочные знаки, которые не всегда могут работать одинаково. Попробуйте это:
ls -d | grep -E '(d )-(d )-(d )$'
И действительно, (d )
группы можно было бы заменить просто d
.
Если вы предпочитаете решение на основе чистого bash, попробуйте это:
ls -d *[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
При желании вы можете упростить это, чтобы быть менее точным:
ls -d *[0-9]*-[0-9]*-[0-9]*
Но я бы предпочел использовать grep
, потому что это намного понятнее, чего вы хотите. Вы могли бы сделать это еще понятнее:
ls -d | grep -E 'd{4}-d{2}-d{2}$'
Ответ №2:
С помощью shopt -s extglob
вы можете сделать:
ls -d * ([0-9])- ([0-9])- ([0-9])