簡體   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