Como usar o sed para editar /var/log/apt/history.log para que o apt-get remova vários pacotes instalados?

1

Depois de executar esses dois comandos:

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

Estou com um monte de pacotes instalados que não preciso / quero na minha instalação do Lubuntu. Eu só queria ver como o Unity se dava no Lubuntu.

Descobri que posso ver a lista de programas instalados observando meu /var/log/apt/history.log

Gostaria de simplesmente cortar e colar essa lista em um comando sudo apt-get remove , mas primeiro preciso excluir as partes que o apt-get não entenderá . Basicamente, tudo dentro dos parênteses (incluindo os parênteses) precisa ir. Além disso, a vírgula e o espaço a seguir após cada entrada também precisarão ser excluídos.

O mais próximo que cheguei de sed até agora é:

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

Isso não está certo, pois exclui quase tudo. Eu presumo que isso seja porque está combinando com a última instância de ")," e excluindo tudo antes disso até "(". Aqui está um link para o programa listar do log que estou tentando editar.

Como você pode imaginar, prefiro não editar essa lista manualmente. Eu não sei quase nada sobre expressões regulares e estou tentando aprender, mas alguns ponteiros específicos iriam longe. Ou talvez haja uma maneira muito melhor de fazer isso?

    
por Insperatus 15.08.2012 / 20:03

2 respostas

2

Seu problema com a expressão regular é sua ganância (os quantificadores * e + tentam corresponder o máximo possível). Infelizmente, não há como informar sed para usar expressões regulares não-vorazes . Você tem que usar Perl para conseguir isso, embora haja soluções alternativas para sed .

Então, experimente o seguinte Perl one-liner :

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

Isso deve manipular o texto como você deseja. Você encontrará o PCRE (expressões regulares Perl) muito semelhante ao POSIX / GNU BRE e ERE um sed usa.

    
por con-f-use 15.08.2012 / 21:09
0

Provavelmente, é melhor correr apt-get autoremove - o que remove dependências quebradas - em vez de editar um arquivo e passá-las manualmente.

    
por Zach Sheffler 15.08.2012 / 20:41