удар получает второе происшествие, после того, как разделено

Я хочу разделить текстовые объемы с "|" как пространство и получить второе происшествие т.е.; значение - 'test2'

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

Вышеупомянутая команда разделяет на каждую строку.. Я могу циклично выполниться через него и получить значение, но хотеть самый эффективный путь.

3
задан 7 September 2015 в 16:18

3 ответа

Можно использовать оболочку, создал в замене параметра "${volumes##*|}", который удаляет самое долгое совпадение начальной строки к | символ

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

, С другой стороны, существует cut

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

или awk

$ awk -F\| '{print $NF}' <<< "$volumes"
test2
5
ответ дан 1 December 2019 в 13:09

Steeldriver уже дал Вам самые легкие опции. Вот являются еще много:

  • awk

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

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

    sed 's/.*|//' <<<$volumes
    
3
ответ дан 1 December 2019 в 13:09

С Вашим tr команда

$ volumes="|test1|test2"
$ tr "|" "\n" <<< $volumes | tail -n1
test2
2
ответ дан 1 December 2019 в 13:09

Другие вопросы по тегам:

Похожие вопросы: