регулярное выражение для поиска каталога даты

#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])