VAR="1\n2\n3"
我正在尝试打印出倒数第二行。重击一线!
我到目前为止:printf -- "$VAR" | head -2
但是它打印的太多了。
我可以使用文件来完成此操作:tail -2 ~/file | head -1
答案 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
有多行并且可以执行,tail
和head
可用于打印任何特定的行号。
$ 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'}"