簡體   English   中英

我如何從bash變量中回顯/打印特定行

[英]how can I echo/print specific lines from a bash variable

我正在嘗試從多行bash變量中打印特定行。 我發現以下內容:

while read line; do echo LINE: "$line"; done <<< "$x"

其中x是變量,但這只是打印出所有行,而不是只打印一行(例如說第1行)。 我該如何調整它以打印出特定的行而不是全部? (希望避免將變量寫入文件中)

您可以將其拆分為以下數組:

IFS=$'\n' lines=($x)

然后,您可以通過索引數組來訪問任何行,例如:

echo ${lines[1]}

(當然, lines[0]是“ line 1”)。

要打印第N行:

sed -n ${N}p <<< "$x"

或(更便於攜帶):

sed -n ${N}p << EOF
$x
EOF

要么

echo "$x" | sed -n "$N"p

要么

echo "$x" | sed -n ${N}p

或(對於特定情況,N == 3)

echo "$x" | sed -n 3p

要么

while read line; do echo LINE: "$line"; done <<< "$x" | sed -n ${N}p

要么

while read line; do echo LINE: "$line"; done << EOF | sed -n ${N}p
$x
EOF

如果您由於某種原因不想使用數組,並且想要在bash中執行此操作,而不是通過生成諸如sed類的外部工具,則可以簡單地計算行數:

[ghoti@pc ~]$ x=$'one\ntwo\nthree\nfour\nfive\n'
[ghoti@pc ~]$ n=3
[ghoti@pc ~]$ for (( c=0; c<n; c++ )); do read line; done <<< "$x"
[ghoti@pc ~]$ echo $line
three
[ghoti@pc ~]$ 

或少使用一個變量:

[ghoti@pc ~]$ n=2
[ghoti@pc ~]$ for (( ; n>0; n-- )); do read line; done <<< "$x"
[ghoti@pc ~]$ echo $line
two

這些方法使用有時稱為“三個循環表達式”的方法。 在從bash到awk到perl到PHP到C(但不是Python!)的許多語言中,它都是常見的結構。 了解它們將總體上幫助您的編程。

雖然...您可能不想使用bash來學習“真實的”編程。 :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM