繁体   English   中英

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

[英]Print second last line from variable in bash

VAR="1\n2\n3"

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

到目前为止,我已经了解了: printf -- "$VAR" | head -2 printf -- "$VAR" | head -2

但是,它打印太多。

我可以用一个文件来做到这一点,没问题: tail -2 ~/file | head -1 tail -2 ~/file | head -1

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

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

这是执行此操作的一种纯bash方法:

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

2

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

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

2

使用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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM