Como você deseja escolher o que remover e o que manter não está claro. Esta é uma das muitas maneiras de obter o resultado que você pede:
$ sea=xyz-ajay-no-siddhart-ubidone-fdh-DMJK.UK.1.0-32133-Z-1.tgz
$ sea2=${sea/*[[:lower:]]-/}; echo ${sea2%.*}
DMJK.UK.1.0-32133-Z-1
Alternativamente, isso inclui as partes que começam com DMJK
e deixando de fora a final .tgz
:
$ sea2=${sea/*DMJK/DMJK}; echo ${sea2%.tgz}
DMJK.UK.1.0-32133-Z-1
Essa mesma abordagem funciona mesmo se o .tgz
não está presente:
$ sea=xyz-ajay-no-siddhart-ubidone-fdh-DMJK.UK.1.0-32133-Z-1
$ sea2=${sea/*DMJK/DMJK}; echo ${sea2%.tgz}
DMJK.UK.1.0-32133-Z-1
DMJK
e também remove o final.tgz
.Como você está determinando quais personagens extrair? Se os caracteres sempre aparecerem em lugares específicos na string, por exemplo se for uma string de tamanho fixo ou os caracteres necessários são os últimos 21 caracteres antes de um ponto e uma extensão de 3 caracteres, você pode usar um dos seguintes em um script Bash:
fonte
Depende da maneira como sua variável pode parecer em outras instâncias.
Pode ser tão simples como:
ou
fonte