bash obtém a segunda ocorrência após a divisão

2

Eu quero dividir os volumes de texto com "|" como espaço e obter a segunda ocorrência ou seja; valor - 'test2'

volumes=|test1|test2
echo $volumes | tr "|" "\n"

O comando acima se divide em cada linha ... Eu posso percorrê-lo e obter o valor, mas quero a maneira mais eficiente.

    
por user1050619 07.09.2015 / 15:09

3 respostas

3

Você pode usar a substituição de parâmetro interna "${volumes##*|}" do shell, que remove a string inicial mais longa correspondente a um caractere |

$ volumes="|test1|test2"
$ echo "${volumes##*|}"
test2

Como alternativa, há cut

$ cut -d\| -f3 <<< "$volumes"
test2

ou awk

$ awk -F\| '{print $NF}' <<< "$volumes"
test2
    
por steeldriver 07.09.2015 / 15:18
3

A Steeldriver já ofereceu as opções mais fáceis. Aqui estão mais alguns:

  • awk

    awk -F'|' '{print }' <<<"$volumes"
    
  • perl

    perl -F"\|" -lane 'print $F[2]' <<<"$volumes"
    
  • sed

    sed 's/.*|//' <<<$volumes
    
por terdon 07.09.2015 / 15:21
1

Com seu comando tr

$ volumes="|test1|test2"
$ tr "|" "\n" <<< $volumes | tail -n1
test2
    
por A.B. 07.09.2015 / 18:53