2012-11-29 160 views

回答

12

隨着sed

var=$(echo -e "AAA\nBBB" | sed -n '2p') 

隨着awk

var=$(echo -e "AAA\nBBB" | awk 'NR==2') 

然後簡單,回聲你的變量:

echo "$var" 
0

像這樣:

var=$(echo -e 'AAA\nBBB' | sed -n 2p) 
echo $var 
BBB 
1

您可以通過管道頭/尾的輸出做到這一點 - var=$(cmd | tail -n +2 | head -n 1)

4

呼叫read兩次:

echo -e "AAA\nBBB" | { read line1 ; read line2 ; echo "$line2" ; } 

請注意,您所需要的{}所以確保兩個命令都獲得相同的輸入流。此外,該變量不是{}外部訪問,因此這並沒有工作

echo -e "AAA\nBBB" | { read line1 ; read line2 ; } ; echo "$line2" 
+4

爲了獲得可變的塊之外存在,則使用不涉及的配管的方法:[進程替換](HTTP:// WWW .gnu.org/software/bash/manual/bashref.html#Process-Substitution)'{read line1;讀第2行; } <<(command)'或者[here-string](http://www.gnu.org/software/bash/manual/bashref.html#Here-Strings)'output = $(command); {讀取line1;讀第2行; } <<<「$ output」' –

+0

@glennjackman請在你的評論中發表你給出的答案,因爲它是迄今爲止給出的最好的答案(所有其他答案都使用'sed'或'awk'或'tail' /''頭'組合)。 –

+0

@glenn jackman上面的輸入非常有價值! – RAM237

2

您可以使用sed

SecondLine=$(Your_command |sed -n 2p) 

例如:

echo -e "AAA\nBBBB" | sed -n 2p 

你根據要打印的行更改編號。

0

在bash腳本: 變量= echo "AAA\nBBB" | awk "NR==2"

1

使用的陣列與參數擴展,以避免子shell:

str="AAA\nBBB" 
arr=(${str//\\n/ }) 
var="${arr[1]}" 
echo -e "$str" 
+0

+1用於提示強大的內置功能。 '/'和'}'之間的空間是否真的有必要? –

+1

是的,沒有空間的子字符串沒有有效的替代來定義單獨的數組元素。 – koola

相關問題