Como uso o 'sed' para despir as informações de versão de uma lista de pacotes?

1

O resultado, por exemplo, de uma pesquisa é uma lista > /tmp/lista.txt:

vlc-2.2.1-195.1.x86_64
pidgin-2.10.11-4.3.x86_64
qmmp-1.0.5-78.1.x86_64
spotify-client-0.9.17.8.gd06432d.31-1.x86_64

Estou usando:

cat /tmp/lista.txt | sed 's/[^a-z]*//g'

Mas eu quero que o resultado seja:

vlc 
pidgin
qmmp
spotify-client
    
por p. Trinx 19.01.2016 / 00:36

2 respostas

3

Eu proponho que isso não é possível de maneira prática. Não com a sua lista.

O problema de cortar os números, ou apenas selecionar o texto, ou qualquer versão do kink com a qual você deseja se identificar, hifens e números são caracteres perfeitamente válidos no pacote nomes . Execute dpkg -l | awk '$2~/-[0-9]/' . Eu vejo ~ 622 tais pacotes no meu desktop 14.04. E não, esses não são os números completos da versão.

Vamos ver alguns openjdk packages:

openjdk-6-jre:amd64             6b37-1.13.9-1ubuntu0.14.04.1
openjdk-6-jre-headless:amd64    6b37-1.13.9-1ubuntu0.14.04.1
openjdk-6-jre-lib               6b37-1.13.9-1ubuntu0.14.04.1
openjdk-7-jdk:amd64             7u91-2.6.3-0ubuntu0.14.04.1
openjdk-7-jre:amd64             7u91-2.6.3-0ubuntu0.14.04.1
openjdk-7-jre-headless:amd64    7u91-2.6.3-0ubuntu0.14.04.1
openjdk-7-jre-lib               7u91-2.6.3-0ubuntu0.14.04.1

Suponho que, se estiverem na sua lista, eles serão exibidos como:

openjdk-6-jre:amd64-6b37-1.13.9-1ubuntu0.14.04.1
openjdk-6-jre-headless:amd64-6b37-1.13.9-1ubuntu0.14.04.1
openjdk-6-jre-lib-6b37-1.13.9-1ubuntu0.14.04.1
openjdk-7-jdk:amd64-7u91-2.6.3-0ubuntu0.14.04.1
openjdk-7-jre:amd64-7u91-2.6.3-0ubuntu0.14.04.1
openjdk-7-jre-headless:amd64-7u91-2.6.3-0ubuntu0.14.04.1
openjdk-7-jre-lib-7u91-2.6.3-0ubuntu0.14.04.1

Então, talvez agora você possa entender por que isso é difícil de extrair. Se você copiar qualquer coisa além de um número, você acaba não sendo capaz de distinguir vários tipos de pacotes.

Meu conselho é obter uma lista melhor com um delimitador adequado que não seja permitido nos nomes dos pacotes. Espaços, vírgulas, guias, etc.

    
por Oli 19.01.2016 / 01:21
2

Você pode combinar um hífen seguido por um dígito e substituir isso e tudo mais depois

$ sed 's/-[0-9].*//' lista.txt 
vlc
pidgin
qmmp
spotify-client
    
por steeldriver 19.01.2016 / 00:45