Extraindo cadeia até o primeiro dígito no Bash

1

Eu gostaria de encontrar um método simples para extrair a parte de uma string até onde o primeiro dígito aparece (possivelmente usando expressões regulares em vez de percorrer o caractere de string por caractere). Estou usando isso para extrair nomes de pacotes de rpm -qa sem suas versões. Por exemplo:

Parsing: perl-Text-ParseWords-3.30-1.fc22.i686
Result: perl-Text-ParseWords
    
por LinuxLearner 17.11.2016 / 18:45

2 respostas

4

Alternativa preferida

Poderíamos simplesmente modificar a consulta do rpm para enviar apenas o nome.

rpm -qa --queryformat "%{NAME}\n"

Ou podemos nos sujar com um regex

Não exatamente "direto", mas aqui está um regex sed que deve ser capaz de fazê-lo.

sed -e 's/\([^\.]*\).*//;s/-[0-9]*$//' <<< "perl-Text-ParseWords-3.30-1.fc22.i686"

Isso deve tratar de tudo, exceto que há um ponto no nome do pacote (nem acho que isso é permitido).

Análise rápida

  • s/\([^\.]*\).*// agarra tudo antes do primeiro período. Então, perl-Text-ParseWords-3.30-1.fc22.i686 se torna perl-Text-ParseWords-3

  • s/-[0-9]*$// livra-se desse% de- inicial e do primeiro dígito da versão. Então, perl-Text-ParseWords-3 se torna perl-Text-ParseWords .

por 17.11.2016 / 19:38
2

Diretamente no bash:

a='perl-Text-ParseWords-3.30-1.fc22.i686'
r='(^[^0-9]+)'
[[ $a =~ $r ]]

echo "${BASH_REMATCH[1]%?}"
    
por 18.11.2016 / 02:58