#regex #linux #find #ls
Вопрос:
Мой вопрос так прост, но я пока не мог найти никакого решения. Мне нужно найти файлы с датой (строкой), повторяющейся в их названиях. Например:
20190101_fl_20190101.nc
20190101_fl_20190104.nc
20190102_fl_20190102.nc
20190102_fl_20190104.nc
Мне нужно найти 20190101_fl_20190101.nc и 20190102_fl_20190102.nc.
Я пытался
ls 20190[0-9][0-9][0-9]_fl_20190[0-9][0-9][0-9].nc
Но, как и ожидалось, он находит все возможные комбинации.
Любая помощь будет высоко оценена.
Ответ №1:
Вы можете использовать
find . -type f -regextype posix-extended -regex '.*/(20190[0-9]{3})_fl_1.nc
Регулярное выражение соответствует
.*/
- любые символы до крайнего правого /
(необходимо, потому что шаблон, используемый с find
, требует полного совпадения строк)
(20190[0-9]{3})
- Группа 1: 2019
и любые три цифры
_fl_
- фиксированная подстрока
1
- обратная ссылка на значение группы 1
.nc
- .nc
струна
$
- конец ввода.
Эта -regextype posix-extended
опция необходима, так как приведенный выше шаблон совместим с POSIX.
Регулярное выражение соответствует
.*/
— любые символы до крайнего правого/
(необходимо, потому что шаблон, используемый сfind
, требует полного совпадения строк)(20190[0-9]{3})
— Группа 1:2019
и любые три цифры_fl_
— фиксированная подстрока1
— обратная ссылка на значение группы 1.nc
—.nc
струна$
— конец ввода.
Эта -regextype posix-extended
опция необходима, так как приведенный выше шаблон совместим с POSIX.