Доброго времени суток.
Необходимо извлечь подстроку.
Есть тарболл (*.tar.gz), в нем "бекап" системы установленной в chroot. Система была установлена (условно) в /mnt/mag.
В архиве, соответственно файлы с путями начиная от корня, но без слеша, т.к. архив рассчитан на последующее извлечение в /
Как это выглядит:
[xxblx@localhost mageia-chroot]$ tar -tf Mageia4_i586.tar.gz | grep -m 15 -E ".*"
mnt/mag/
mnt/mag/dev/
mnt/mag/dev/nst29m
mnt/mag/dev/ttyS6
mnt/mag/dev/tty2
mnt/mag/dev/ipmo
mnt/mag/dev/port
mnt/mag/dev/ttyI8
mnt/mag/dev/sddh14
mnt/mag/dev/pppox44
mnt/mag/dev/ptyc3
mnt/mag/dev/ttyye
mnt/mag/dev/ttySR261
mnt/mag/dev/mga_vid
mnt/mag/dev/nvidia142Весь печатать смысла нет сюда, первых 15 строк, думаю, достаточно чтобы все поняли о каком содержимом архива речь.
Задача получить из содержимого архива путь, куда была установлена система, какой каталог использовался для chroot, в выводе выше это /mnt/mag, но мог быть и другой, хоть /mnt/chroot, хоть /mnt/dir/dir/dir/dir/chroot. В общем-то, кто знает =)
Я привык, что в python'е используя регулярки, я могу указать скобками какую часть найденного мне надо сохранить и знаком ? могу из жадных делать ленивые квантификаторы.
С grep'ом что-то не прокатывает. Справку прочитал, ответ не нашел. Пробовал как -E, так и другие типы регулярок.
[console][xxblx@localhost mageia-chroot]$ tar -tf Mageia4_i586.tar.gz | grep -m 1 -o -E "^(.+?)/usr"
mnt/mag/usr[/console]
А надо чтобы в выводе было mnt/mag/ или mnt/mag
Пока что в голову пришло только
[console][xxblx@localhost mageia-chroot]$ tar -tf Mageia4_i586.tar.gz | grep -m 1 -o -E "^(.+?)/usr" | grep -o -E "^.+/"
mnt/mag/[/console]
Но это выглядит откровенно стремно.
Можно это как-нибудь более изящно сделать?