Regex101 для Grep/egrep ничего не возвращает

Вы можете добавить задание cronна каждый сервер, чтобы каждое утро находить и удалять старые резервные копии:

30 02 * * * /usr/bin/find /mybackup/ontape_tmp_backup -type f -mtime +14 -print -delete

Эта запись cronбудет выполнять команду findкаждое утро в 02 :30. Команда findнаходит в каталоге все файлы старше 14 дней и печатает имя файла (который будет зарегистрирован ), и удалит файл.

0
19.12.2019, 02:00
2 ответа

Вы должны удалить разделитель m//, поэтому:

grep -P '(?s)##\s\[v0.0.1].+?(?=---)' CHANAGELOG.md

Но не подходит для многострочного -режима режима по умолчанию, как в вашем фрагменте regex101.

Итак, на помощь:

perl -0 -lne 'print $& if m/(?s)##\s\[v0.0.1].+?(?=---)/' file

Выход

## [v0.0.1]

### Added
- Initial Commit/Release
1
28.01.2020, 02:38

Здесь я вижу две основные проблемы::

  1. прилагаемые m/и /являются регулярными выражениями разделителями-они не должны включаться как часть самого регулярного выражения.

  2. grepпо умолчанию ориентирован на строку -, поэтому на самом деле не выполняет многострочное сопоставление. По крайней мере, в GNU grep вы можете использовать разграничение нулевого байта, чтобы запутать его, добавив флаг -Z.

Так например

$ grep -zPo '(?s)##\s\[v0.0.1].+?(?=---)' CHANGELOG.md
## [v0.0.1]

### Added
- Initial Commit/Release

Для многострочного сопоставления можно использовать pcregrep, если он доступен для вашей платформы, например.

pcregrep -Mo '(?s)##\s\[v0.0.1].+?(?=---)' CHANGELOG.md
0
28.01.2020, 02:38

Теги

Похожие вопросы