Вывести вторую последнюю строку из переменной в bash - PullRequest
0 голосов
/ 24 сентября 2018
VAR="1\n2\n3"

Я пытаюсь распечатать вторую последнюю строку.Один вкладыш в bash!

Я до сих пор получил: printf -- "$VAR" | head -2

Однако он слишком много печатает.

Я могу сделать это с файлом без проблем:tail -2 ~/file | head -1

Ответы [ 4 ]

0 голосов
/ 24 сентября 2018

может быть более эффективно использовать временную переменную и использовать расширения

var=$'1\n2\n3' ; tmpvar=${var%$'\n'*} ; echo "${tmpvar##*$'\n'}"
0 голосов
/ 24 сентября 2018

Вот один простой способ сделать это:

readarray -t arr < <(printf -- "$VAR") && echo "${arr[-2]}"

2

Вы также можете использовать это awk как одну команду:

VAR="1\n2\n3"
awk -F '\\\\n' '{print $(NF-1)}' <<< "$VAR"

2
0 голосов
/ 24 сентября 2018

Используйте echo -e для интерпретации обратной косой черты и перевода \n на новые строки и напечатайте интересующий номер строки, используя NR.

$ echo -e "${VAR}" | awk 'NR==2'
2

С несколькими строками и сделайте, tail и head можно использовать для печати любого конкретного номера строки.

$ echo -e "$VAR" | tail -2 | head -1
2

или сделать причудливый sed, где вы сохраняете предыдущую строку в буферном пространстве (x) для печати и продолжаете удалять допоследняя строка,

$ echo -e "$VAR" | sed 'x;$!d'
2
0 голосов
/ 24 сентября 2018

Вы почти выполнили эту задачу самостоятельно.Попробуйте

VAR="1\n2\n3"; printf -- "$VAR"|tail -2|head -1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...