Extrai uma palavra de uma string no shell script

1

Eu tenho uma string como $ sea = xyz-ajay-no-siddhart-ubidona-fdh-DMJK.UK.1.0-32133-Z-1.tgz

e eu quero extrair apenas DMJK.UK.1.0-32133-Z-1 e string de pesquisa será DMJK

Eu tentei gostar

echo $sea
y=${sea/\/*\//};
echo ${y/.*/};

mas não está funcionando, por favor ajude

    
por Ajay Gautam 17.07.2015 / 02:35

3 respostas

1

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

Como alternativa, isso inclui as partes que começam com DMJK e deixam de fora o% 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 estiver 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
    
por 17.07.2015 / 02:54
0

Como você está determinando quais caracteres extrair? Se os caracteres sempre aparecerem em lugares específicos na string, por exemplo Se for uma string de tamanho fixo ou os caracteres que você precisa 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:

sea="xyz-ajay-no-siddhart-ubidone-fdh-DMJK.UK.1.0-32133-Z-1.tgz"

echo $sea
# If characters are always in positions 33 to 50
y=${sea:33:21}
echo $y

# If y always start 5 positions from the end and goes back 21 characters
# For negative numbers you need to put a space between the colon and the
# number
#
# Get the last 25 characters in the string
y=${sea: -25}
# Now discard the last 4, which are the dot and 3 character extension
y=${y:0:21}
echo $y
    
por 17.07.2015 / 03:24
0

Depende da maneira como sua variável pode parecer em outras instâncias.

Pode ser tão simples como:

echo $sea | cut -d '-' -f 7- | cut -d . -f -4

ou

echo $sea | sed 's#.*\(DMJK.*\).tgz##g'
    
por 17.07.2015 / 04:03

Tags