LINUX.ORG.RU

Остался без базы данных pacman'а

 , ,


0

1

Добрый день! Так получилось что я случайно снес всю БД с информацией о установленных пакетах, и лога установки пакетов у меня так же не оказалось.

При помощи гугла я нашел следующий скрипт: https://bbs.archlinux.org/viewtopic.php?id=86562 И на выводе я получил примерно следующее:

a52dec-0.7.4-8                                       100%
aalib-1.4rc5-10                                      100%
abs-2.4.4-2                                          100%
accountsservice-0.6.40-1                             100%
Теперь мне нужно отделить имя пакета от его версии, и прочей части каждой строки. В похожих задачах я использовал cut, но тут все куда сложнее.

Не могли бы вы написать для меня sed-выражение, которое отсекало бы содержимое строки после знака "-" и любого числа идущего за ним?

Ответ на: комментарий от kalterfive
zeitgeist-0.9.15
zenity-3.16.3
zip-3.0
zita-alsa-pcmi-0.2.0
zita-resampler-1.3.0

Я наверное не правильно обьяснил, мне нужно именно наименование пакетов, без версии.

shooter93 ★★ ()
Ответ на: комментарий от shooter93

Мой второй пост подходит.

sed -r 's/(..*)-..*/\1/g'
sed по умолчанию жадный, по-этому беспокоится о том, до какой тирешки он будет искать не приходится (именно в данном случае).

kalterfive ★★ ()
Ответ на: комментарий от kalterfive

Да вот как раз, версии пакетов он оставляет(а они мне как раз не нужны):

[shooter@box ~]$ cat /tmp/packages_selected.list | sed -r 's/(..*)-..*/\1/g'
a52dec-0.7.4
aalib-1.4rc5
abs-2.4.4
accountsservice-0.6.40
acl-2.2.52
Первый ближе, но да, есть проблема с пакетами с тирешечкой в названии:
[shooter@box ~]$ cat /tmp/packages_selected.list | sed 's/-.*//g'
...
xorg
xorg
xorg
xorg
xorg
xorg
xorg
xorg
xorg
xorg
xorg

shooter93 ★★ ()
Ответ на: комментарий от shooter93

А, точно. Если в версии пакета так же будет '-', то может дать сбой. Здесь бы лучше воспользоваться регулялками Perl-a, чтобы получить менее костыльный и более надёжный вариант.

perl -pe 's/-\d[a-zA-Z\d\.-]+//'
Тесты успешно пройдены:
hell-lk-21.21
ashka-asd-121-beta-211.21
kls-112
Возможно, что-то ещё не учтено.

Вообще, какой-то неодназначный вывод. В pacman -Q оно как-то более продумано для парсинга.

kalterfive ★★ ()
mikhail@lens ~ $ cat /tmp/packages.txt 
zeitgeist-0.9.15
zenity-3.16.3
zip-3.0
zita-alsa-pcmi-0.2.0
zita-resampler-1.3.0
mikhail@lens ~ $ cat /tmp/packages.txt | sed 's/-[0-9].*//'
zeitgeist
zenity
zip
zita-alsa-pcmi
zita-resampler
Deleted ()
$ echo 'a-b-c-v228-1488               100%' | sed -e 's/-[^\-]*-[^\-]*$//g'
a-b-c
f1u77y ★★★ ()

чисто из академического интереса:

rev | cut -d'-' -f 3- | rev

Формат имени пакета всегда одинаков. А так, sed и регулярка по символам, да.

arcanis ★★★★ ()
Ответ на: комментарий от anonymous

в раче таких пакетов нет:

Формат имени пакета всегда одинаков

В реальном мире проще, быстрее и надежнее отталкиваться от реальной ситуации, а не от того, что в голову вбредет.

arcanis ★★★★ ()
Последнее исправление: arcanis (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.