2012-11-29 120 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

相关问题