Как использовать sed для редактирования /var/log/apt/history.log, чтобы apt-get удалить множество установленных пакетов?

После выполнения этих двух команд:

sudo apt-get install ubuntu-desktop
sudo apt-get remove ubuntu-desktop

У меня остался избыток установленных пакетов , которые мне не нужны / не нужны в моей установке Lubuntu. Я просто хотел посмотреть, как Unity выступал под Lubuntu.

Я обнаружил, что могу просмотреть список установленных программ, посмотрев на мой /var/log/apt/history.log

Я хотел бы просто вырезать и вставить этот список в команду sudo apt-get remove, но сначала мне нужно удалить части, которые apt-get не поймет . В основном все внутри скобок (включая сами скобки) должно пройти. Кроме того, следующую запятую и пробел после каждой записи также необходимо удалить.

Самое близкое, что я сделал с sed до сих пор:

sed -e 's/(.*),[[:space:]]//g' apt-log.txt

Это не правильно, так как удаляет почти все. Я предполагаю, что это потому, что он соответствует самому последнему экземпляру ")" и удаляет все, что до него, до "(". Вот ссылка на список программ из журнала, который я пытаюсь отредактировать.

]

Как вы можете себе представить, я бы предпочел не редактировать этот список вручную. Я почти ничего не знаю о регулярных выражениях и пытаюсь выучить, но несколько конкретных указателей могли бы иметь большое значение. Или, может быть, есть гораздо лучший способ пойти об этом?

1
задан 15 August 2012 в 22:40

2 ответа

Ваша проблема с регулярным выражением - жадность (* и +, кванторы пытаются соответствовать столько, сколько они могут). К сожалению, существует никакой способ сказать sed использовать нежадные регулярные выражения . Необходимо использовать Perl для выполнения этого, хотя ужасные обходные решения для sed действительно существуют.

Так пробуют следующий Perl острота :

perl -pe 's/\(.*?\)(, )?//g' /var/log/apt-history.log

, Который должен управлять текстом, как Вы желаете. Вы найдете PCRE (регулярные выражения Perl) очень похожий на POSIX / GNU BRE и ДО один sed использование.

2
ответ дан 15 August 2012 в 22:40

Вы - вероятно, более обеспеченное выполнение apt-get autoremove - который удаляет поврежденные зависимости - вместо того, чтобы редактировать файл и передать их вручную.

0
ответ дан 15 August 2012 в 22:40

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

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