могут ли группы захвата регулярных выражений использоваться в команде поиска GNU?

С помощью команды find GNU ( GNU findutils 4.4.2 ) для поиска файлов можно использовать регулярное выражение. Например:

 $ find pool -regextype posix-extended -regex ".*/mypackage-([a-zA-Z0-9.]+-[0-9]{1,2})-x86_64.pkg.tar.xz+" 

Можно ли извлечь группу захвата, определенную этим выражением, и использовать ее в аргументе -printf ?

Итак, учитывая найденный файл с именем pool/mypackage-1.4.9-1-x86_64.pkg.tar.xz , я хотел бы включить часть 1.4.9-1 в выражение printf .

Это возможно?

2 Solutions collect form web for “могут ли группы захвата регулярных выражений использоваться в команде поиска GNU?”

Альтернатива тонкому ответу l0b0 (короче, но потенциально немного менее эффективная):

Предполагая (последнее) GNU sed :

 find pool -print0 | sed -znE 's|.*/mypackage-([[:alnum:].]+-[0-9]{1,2})-x86_64\.pkg\.tar\.xz$|\1|p'| tr '\0' '\n' 

Обратите внимание, что дорогая часть find – это движение по дереву, которое ему все равно придется делать независимо от того, есть ли у вас -regex или нет. Итак, здесь мы выполняем сопоставление и отчетность в sed .

Если вы используете

 find pool -regextype posix-extended \ -regex ".*/mypackage-([a-zA-Z0-9.]+-[0-9]{1,2})-x86_64\.pkg\.tar\.xz" \ -printf '%f\n' | grep -Eo '[a-zA-Z0-9.]+-[0-9]{1,2}' 

(при условии GNU grep ), он должен работать для любого пути. Регулярное выражение не допускает никаких новых строк, поэтому нет возможности сопоставить его, например, каталог, содержащий аналогичное имя.

  • Удалить папки, чье имя имеет 4-значное число два раза
  • Поведение POSIX привязок sed и $ regex с многострочными пространствами шаблонов
  • жадные и ленивые регулярные выражения (вопрос понимания)
  • Фильтрация вывода журнала на отдельных линиях
  • sed, конвертировать одиночную обратную косую черту в двойную обратную косую черту
  • Назначения значений двойной кавычки, хранящиеся в CSV?
  • изменить шаблон, удалив пробелы?
  • Вырезать файл, ограниченный числом с одной или несколькими цифрами
  • Как искать слово, сохраненное в пространстве удержания с помощью sed?
  • regex, только первое появление
  • sed string с плохими символами
  • найти с пользовательскими переменными
  • Interesting Posts

    Перенаправление только stderr в трубу

    Как настроить определенные программы для открытия в полноэкранном режиме?

    lsyncd: Возможно ли синхронизировать отдельные файлы из списка?

    Где можно найти инструменты для проверки целостности хранилища (записи / чтения)?

    Монтирование изображения squashfs с наложением чтения и записи для rootfs

    Добавление вывода команды в цикл for

    Как указать аргументы для возврата всех файлов точек, но не. а также ..?

    Как перечислить весь установленный пакет в Fedora со временем установки

    Линейная командная строка Linux, которая выйдет из строя, если будет произведен какой-либо стандарт

    Чтение строки переменного размера и разбиение ее содержимого на отдельные строки с текстом

    VPN с iptables и маршрутизацией: порт доступа из локальной сети

    SELinux Запись доступа для vsftpd и samba

    Проблемы с беспроводной связью в Fedora 25

    Замена строк в файле с использованием разных значений для замены одного и того же шаблона

    Не awk печатает все строки, если они передаются пустым аргументам

    Linux и Unix - лучшая ОС в мире.