как урезать список обновленных пакетов dpkg

Последнее обновление остановило мою систему, и я пытаюсь отменить последнее обновление. Я открыл свой комп с живым USB и привязал к разделу, на котором установлена ​​ОС. Я получаю обновленные пакеты с

cat /var/log/dpkg.log | grep upgrade >>upgradeddpkg

. В нем перечислены пакеты, например,

2014-03-14 15:31:45 upgrade libprocps0:i386 1:3.3.3-2ubuntu5.3 1:3.3.3-3
2014-03-14 15:31:52 upgrade libreadline-dev:i386 6.2-9ubuntu1 6.2+dfsg-0.1
2014-03-14 15:31:53 upgrade libreadline6-dev:i386 6.2-9ubuntu1 6.2+dfsg-0.1
2014-03-14 15:31:55 upgrade readline-common:all 6.2-9ubuntu1 6.2+dfsg-0.1
2014-03-14 15:32:25 upgrade libreadline6:i386 6.2-9ubuntu1 6.2+dfsg-0.1
2014-03-14 15:32:33 upgrade libudev0:i386 175-0ubuntu19 175-7.2
2014-03-14 15:32:40 upgrade libdevmapper-dev:i386 2:1.02.74-6ubuntu4 2:1.02.74-8
2014-03-14 15:32:42 upgrade libdevmapper-event1.02.1:i386 2:1.02.74-6ubuntu4 2:1.02.74-8
2014-03-14 15:32:43 upgrade libdevmapper1.02.1:i386 2:1.02.74-6ubuntu4 2:1.02.74-8
2014-03-14 15:32:44 upgrade dmsetup:i386 2:1.02.74-6ubuntu4 2:1.02.74-8

. Как я могу получить только название пакетов с помощью grep, awk или любого другого инструмента?

1
задан 15 March 2014 в 14:50

2 ответа

Попробуйте ниже команды,

awk ' { print $4 } ' upgradeddpkg > upgrade.txt

, Если Вы не хотите двоеточие : тогда выполненный,

awk -F ':' ' { print $1 } ' upgrade.txt > upgrade1.txt

Объяснение:

awk ' { print $4 } ' upgradeddpkg > upgrade.txt

В этом, awk берет вход от upgradeddpkg и печатает только 4$ (номер столбца 4).That, вывод был перенаправлен к upgrade.txt файл. Таким образом, файл upgrade.txt содержит только имена пакета с двоеточием. Для удаления двоеточия и его предстоящей части (после) необходимо выполнить вторую команду. По умолчанию awk рассматривает пространство как разделитель.

awk -F ':' ' { print $1 } ' upgrade.txt > upgrade1.txt

двоеточие Разделителя было вручную установлено, и awk рассматривает двоеточие как разделитель вместо пространства. Теперь awk берет вход (stdin) из upgrade.txt и печатает (stdout), coloumn1 (часть перед двоеточием).Finally стандартный вывод был перенаправлен к upgrade1.txt.Now, это содержит только имена пакета.

0
ответ дан 15 March 2014 в 14:50

Существует проблема с помощью grep для начального поиска, в который она включает вещи как ubuntu-release-upgrader-core:all. Я использовал бы сингл awk соответствовать и выбрать правую сторону поля.

awk '$3=="upgrade" { print $4 }' /var/log/dpkg.log

По умолчанию awk разделяет каждую строку на основе пробелов. Третье поле является действием (таким образом, мы проверяем, что оно равняется "обновлению"), и четвертым является имя пакета.

Некоторые пакеты обновлены много, таким образом, можно отключить шум дубликатов с:

awk '$3=="upgrade" { print $4 }' /var/log/dpkg.log | sort -u

Я видел ответ Avinash теперь... Я был бы немного осторожен из отрезания от архитектуры... В зависимости от того, что Вы делаете, они могли быть столь же релевантными как имя пакета... Но если бы Вы действительно хотели отрезать их, то я, вероятно, сделал бы это в том же awk оператор:

awk '$3=="upgrade" { split($4, a, ":"); print a[1] }' /var/log/dpkg.log | sort -u

С другой стороны, Вы могли установить несколько разделителей полей для awk, так, чтобы это разделило или на пробелах или на двоеточиях:

awk -F'[ :]' '$5=="upgrade" { print $6 }' /var/log/dpkg.log
3
ответ дан 15 March 2014 в 14:50

Другие вопросы по тегам:

Похожие вопросы: