[英]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.