Como selecionar os pacotes que começam com “mate-” mas não terminam com “-dev”?

5

Eu quero instalar todos os pacotes MATE,

$ sudo apt-get install '^mate'

No entanto, ele seleciona muitos pacotes e alguns pacotes estão em conflito com alguns pacotes instalados.

Agora, quero excluí-los. Alguma idéia?

Nenhuma surpresa, isso não funcionará:

$ sudo apt-get install '^mate && !-dev'

Ou, posso simplesmente deixar o apt-get ignorar esses pacotes conflitantes?

    
por Xiè Jìléi 05.08.2012 / 05:32

3 respostas

1

Você poderia tentar algo como:

list="" ; for pkg in $(apt-cache search ^mate | grep -v -- '-dev'); list="$list $pkg" ; done ; sudo apt-get install $list
    
por 05.08.2012 / 05:49
5

Você só pode passar uma expressão regular como argumento para apt-get install .

Você pode fazer uma expressão regular que faça o que quiser, mas é tediosa. A negação de uma expressão regular pode ser expressa com uma expressão regular, mas o tamanho da regex do complemento cresce exponencialmente com o tamanho do original em geral.

apt-get install '^mate(.?.?.?|.*([^v]|[^e]v|[^d]ev|[^-]dev))$'

Você pode usar os padrões de pesquisa do Aptitude para gerar a lista de pacotes com uma sintaxe semi-decente e passar a lista resultante para apt-get install ou aptitude install .

aptitude search '^mate !-dev$'
    
por 08.08.2012 / 03:48
0

Eu também fiz a pergunta. Eu tentei lookaheads negativos, mas o apt-get não os entendia. Então eu procurei por outro caminho, arquivar o mesmo resultado e encontrei a resposta aqui. No entanto, como a solução escolhida usa o grep, você pode usar lookaheads e encurtar a expressão do serach, em termos de chamadas, ainda mais:

apt-cache search '^mate' | grep -P '^mate(?!.*dbg)(?!.*dev).*'

E lembre-se de que os pacotes Mates, como atril, não começam com um parceiro no início de seu nome. Eles nem sequer contêm isso.

    
por 07.11.2015 / 16:55

Tags