从bash中的变量打印倒数第二行

时间:2018-09-24 14:02:08

标签: linux bash macos printf

VAR="1\n2\n3"

我正在尝试打印出倒数第二行。重击一线!

我到目前为止:printf -- "$VAR" | head -2

但是它打印的太多了。

我可以使用文件来完成此操作:tail -2 ~/file | head -1

4 个答案:

答案 0 :(得分:3)

您几乎独自完成了这项任务。试试

VAR="1\n2\n3"; printf -- "$VAR"|tail -2|head -1

答案 1 :(得分:1)

这是一种纯粹的打击方式:

 statusID="HELLO" or statusID=HELLO

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

您也可以将此2 用作单个命令:

awk

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

答案 2 :(得分:0)

使用echo -e进行反斜杠解释,并将\n转换为换行符,然后使用NR打印感兴趣的行号。

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

有多行并且可以执行,tailhead可用于打印任何特定的行号。

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

或者做一个奇妙的sed,将上一行保留在缓冲区(x)中以进行打印,并删除直到最后一行,

$ echo -e "$VAR" | sed 'x;$!d'
2

答案 3 :(得分:0)

使用临时变量和扩展可能会更有效

var=$'1\n2\n3' ; tmpvar=${var%$'\n'*} ; echo "${tmpvar##*$'\n'}"