После выполнения этих двух команд:
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
Это не правильно, так как удаляет почти все. Я предполагаю, что это потому, что он соответствует самому последнему экземпляру ")" и удаляет все, что до него, до "(". Вот ссылка на список программ из журнала, который я пытаюсь отредактировать.
]Как вы можете себе представить, я бы предпочел не редактировать этот список вручную. Я почти ничего не знаю о регулярных выражениях и пытаюсь выучить, но несколько конкретных указателей могли бы иметь большое значение. Или, может быть, есть гораздо лучший способ пойти об этом?
Ваша проблема с регулярным выражением - жадность (*
и +
, кванторы пытаются соответствовать столько, сколько они могут). К сожалению, существует никакой способ сказать sed
использовать нежадные регулярные выражения . Необходимо использовать Perl
для выполнения этого, хотя ужасные обходные решения для sed
действительно существуют.
Так пробуют следующий Perl
острота :
perl -pe 's/\(.*?\)(, )?//g' /var/log/apt-history.log
, Который должен управлять текстом, как Вы желаете. Вы найдете PCRE (регулярные выражения Perl) очень похожий на POSIX / GNU BRE и ДО один sed
использование.
Вы - вероятно, более обеспеченное выполнение apt-get autoremove
- который удаляет поврежденные зависимости - вместо того, чтобы редактировать файл и передать их вручную.