Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Скрипт который возращает список зависимостей deb пакета в файл  (Прочитано 1358 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kosteek

  • Автор темы
  • Участник
  • *
  • Сообщений: 193
    • Просмотр профиля
Прошу помощи доделать скрипт который сохранял зависимости deb пакета в файл
Вот моя наработка
#!/bin/bash
dpkg -I k3b.deb | grep Depends > depends                       #Получаем строку Depends
echo $( sed -e s/,//g depends ) > depends                     #Удаляем запятые
echo $( sed -e s/'>'//g depends ) > depends                   #Удаляем знак >
echo $( sed -e s/'='//g depends ) > depends                  #Удаляем знак =
echo $( sed -e s/'Depends: '//g depends ) > depends  #Удаляем слово "Depends: "
echo $( sed -e s/['({?})']/' '/g depends ) > depends        #тут хочу удалять все что в скобках вместе со скобками
echo $( sed -e s/'|'/' '/g depends ) > depends                #Удаляем знак |
Получаю вот что
kdelibs4c2a 4:3.5.9 libacl1 2.2.11-1 libart-2.0-2 2.3.18 libattr1 2.4.41-1 libaudio2 libc6 2.4 libdbus-1-3 1.0.2 libdbus-qt-1-1c2 0.62.git.20060814 libexpat1 1.95.8 libfontconfig1 2.4.0 libfreetype6 2.2.1 libgcc1 1:4.1.1 libhal1 0.5.8.1 libice6 1:1.0.0 libidn11 0.5.18 libjpeg62 libk3b3 1.0.5+kde4svn935857+really1.0.5-3ubuntu5 libmusicbrainz4c2a 2.1.5 libpng12-0 1.2.13-4 libqt3-mt 3:3.3.8-b libsm6 libstdc++6 4.1.1 libx11-6 libxcursor1 1.1.2 libxext6 libxft2 2.1.1 libxi6 2:1.2.0 libxinerama1 libxrandr2 2:1.2.99.2 libxrender1 libxt6 zlib1g 1:1.1.4 wodim cdrskin cdparanoia 3a9.8 genisoimage kdelibs-data 4:3.1.4-2 cdrdao 1.1.7-5 k3b-data 1.0.5+kde4svn935857+really1.0.5-3ubuntu5
Мне нужно получить имена пакетов списком, вот так
kdelibs4c2a
libacl1
libart-2.0-2
...

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
dpkg -I k3b.deb | grep Depends: | awk -vRS=, '{print $1}' | grep -v Depends:

Оффлайн kosteek

  • Автор темы
  • Участник
  • *
  • Сообщений: 193
    • Просмотр профиля
Mam(O)n супер!!!
+1000000000
Спасибо!

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Не, не супер, тупанул чуток. Первая зависимость невыдается. Так правильнее:

dpkg -I k3b.deb | grep Depends: | sed 's/Depends://' | awk -vRS=, '{print $1}'

Оффлайн kosteek

  • Автор темы
  • Участник
  • *
  • Сообщений: 193
    • Просмотр профиля
Спсибо! Можешь разъяснить эту строчку
awk -vRS=, '{print $1}'
что она делает?
Во это я понял:  dpkg -I k3b.deb | grep Depends: | sed 's/Depends://'

Оффлайн absent

  • Активист
  • *
  • Сообщений: 368
  • Ubuntu 16.04
    • Просмотр профиля
в перечисляемых зависимостях надо еще учитывать "|"

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Скрипт который возращает список зависим&#
« Ответ #6 : 30 Ноября 2009, 15:21:10 »
awk обрабатывает записи как-бы в табличном режиме. То есть каждую строку таблицы исполняет те команды, что в {} и соответственно колонкам заполняет переменные $[0-9]+. По умолчанию разделитель колонок это непрерывные пробелы или табуляции (в регекспе это какбы [ \t]+), а разделитель строк это \n, тоесть символ перевода строки. С помощью -vRS=, я указал, что разделитель строк это запятая и с помощью print $1 я вывожу значение только первой колонки.

Пользователь решил продолжить мысль 30 Ноября 2009, 01:31:50:
в перечисляемых зависимостях надо еще учитывать "|"
Да, сейчас это не учитывается, берется только первый вариант. Можно, если просто брать все варианты сделать так:
dpkg -I apache2_2.2.12-1ubuntu2.1_all.deb | grep Depends: | sed 's/Depends://' | awk -vRS='[,|]' '{print $1}'
зы. Интересный парсер на форуме. То "у6унту" на "ubuntu" заменяет, то щас "\n" на перевод строки заменил а "\t" на табуляцию... Зато при редактировании хоть можно оставить как хочешь... Только кроме русского "у6унту".
« Последнее редактирование: 30 Ноября 2009, 15:36:08 от Mam(O)n »

Оффлайн kosteek

  • Автор темы
  • Участник
  • *
  • Сообщений: 193
    • Просмотр профиля
Ребята помогите, скрип последний тоже не совсем правильная
dpkg -I fp-units-base_2.2.4-0_i386.deb | grep -a Depends: | sed 's/Depends://' | awk -vRS='[,|]' '{print $1}'выдаст
Pre-а в пакете вот такие зависимости
Pre-Depends: dpkg (>= 1.10.24)
Depends: fp-units-rtl (= 2.2.4-0)

Помогите пожалуйста допилить скрипт.

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Вот бяка какая. А мы её так:
dpkg -I fp-units-base_2.2.4-0_i386.deb | grep -aE '.*Depends:' | sed 's/.*Depends://' | awk -vRS='[,|\n]' '{print $1}'

Оффлайн kosteek

  • Автор темы
  • Участник
  • *
  • Сообщений: 193
    • Просмотр профиля
 :D СПАСИБО!!!! Здорово!

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
А лучше даже так:
dpkg -I fp-units-base_2.2.4-0_i386.deb | grep -aE '^ (Pre-)?Depends:' | sed 's/.*Depends://' | awk -vRS='[,|\n]' '{print $1}'

 

Страница сгенерирована за 0.058 секунд. Запросов: 25.