Извлечение символов в соответствии с шаблоном, но только между любым из двух шаблонов начала диапазона и общим конечным шаблоном

Использование zsh, либо изначально, либо черезzsh -c "...":

rm -f /path/to/folder/*(.m+0)     # for that directory only

rm -f /path/to/folder/**/*(.m+0)  # recursively

Скобки (... )создают zsh "квалификатор glob" . Внутри точка .указывает простые файлы (, аналогичные find -type f), а m+0требует, чтобы время модификации файла было строго больше нуля дней назад, после усечения до целых дней — 23. часы 0 дней; 25 часов будет 1 день.

Чтобы еще больше соответствовать поведению findпо умолчанию при поиске/сопоставлении «скрытых» файлов (, которые начинаются с точки ), добавьте квалификатор заглавной D:

rm -f /path/to/folder/*(D.m+0)     # for that directory only

rm -f /path/to/folder/**/*(D.m+0)  # recursively

0
18.09.2020, 10:50
1 ответ

Ниже приводится awkрешение. Требуется GNU awk для функции gensub():

awk '$0=="EMC" {s=0} s{print FNR, gensub(/[^(]*\((.)\)[^(]*/, "\\1", "g")} /^\/(Span|H1) <<\/MCID$/ {s=1}' test.pdf

Это установит флаг sв 1, когда будет найден начальный шаблон, определяемый как строка, начинающаяся с /SpanИЛИ /H1, за которой следует и заканчивается <</MCID. Флаг будет сброшен, если будет найдена строка, состоящая из EMC.

Внутри области (, т.е. когда sравно 1 ), используйте функцию gensub()для замены любого вхождения шаблона "любое количество символов, не являющихся (, за которым следует один символ в ( ), за которым следует любое количество символов, не являющихся (", символом, содержащимся в ( ). Затем он печатает номер текущей строки и извлеченный текст.

Обратите внимание , что это подразумевает отсутствие строк, которые не содержали бы такой шаблон между начальной и конечной строками.

0
18.03.2021, 23:04

Теги

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