могут ли группы захвата регулярных выражений использоваться в команде поиска 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 ), он должен работать для любого пути. Регулярное выражение не допускает никаких новых строк, поэтому нет возможности сопоставить его, например, каталог, содержащий аналогичное имя.

  • Как совместить классы символов POSIX регулярного выражения?
  • Отрицательные ожидания lookback / forward в Linux меньше пейджера (или vim)
  • Сопоставление слов, содержащих символы за пределами a-zA-Z
  • Любое небелое регулярное выражение
  • Как использовать хэш (#) в качестве разделителя для sed
  • Замените файл с разделителями-запятыми на канал, но не удаляйте запятую или кавычки и т. Д. В поле определения текста, однако удалите спецификатор текста!
  • Разрешить только шестнадцатеричное регулярное выражение
  • Печать определенных значений данных изображения Exif с помощью exiv2
  • Уменьшение числа с помощью sed
  • Сед и регулярные выражения
  • Как правильно использовать find с регулярным выражением?
  • Interesting Posts

    File Globbing: добавление * * & * * вместе

    BASH получает значение из строки

    в чем смысл этой команды sed? sed '# 012 / \ n / g'

    Клавиша 'd' в VNC Viewer сводит к минимуму все окна

    Не удается просмотреть список разделов Windows в Linux

    кавычки, сгенерированные другим скриптом Bash, которые не обрабатываются как кавычки в исходном скрипте

    Убивание подпроцессов после завершения или уничтожения скрипта

    Почему безопаснее предоставлять права sudo для пользователя без root?

    Переименовать каталог и заменить только обновленные файлы Командная строка Unix / Linux

    Как предотвратить выключение при входе пользователя SSH?

    Использование нажатий клавиш в терминале Linux

    Как заблокировать исходящие подключения от процесса / пользователя на FreeBSD?

    Как использовать переменные внутри одинарных кавычек

    Где я могу найти таблицу версий дистрибутивов CentOS и соответствующих версий ядра Linux?

    sfdisk –no-read не работает

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