如何从输出中获取特定行并将其保存在一个变量中?

如何从输出中获取特定行并将其保存在一个变量中?

当我运行这个命令时

user@ubuntu:~$ ./2input1output Jojo Ar Dublin

它给了我这个输出

Your First Name: Jojo 
Your Last Name : Ar 
Your Hometown : Dublin
Thank you, Jojo Ar From Dublin,
Welcome to Stackoverflow

现在我需要显示该输出的第四行和第五行,然后将其保存到变量中。我努力了

user@ubuntu:~$ (sed -n 4,5p ./2input1output)

但它给了我这个输出

echo"Thank you, $1 $2 From $3,
Welcome to stackoverflow"

答案1

您的命令实际上正在按预期工作;您要求 sed 从文件“2input1output”返回第 4 行和第 5 行。正如您所看到的,位置参数(即 $1、$2 和 $3)被返回,因为这就是脚本中的内容。

您需要做的实际上是首先运行脚本以获得所需的输出(STDOUT),然后将其通过管道传输到流编辑器(sed)。因此,只需点击一下即可将所需内容保存到变量中:

$ MESSAGE=$(./2input1output Jojo Ar Dublin | sed -n 4,5p)

请记住,如果访问变量时需要保留换行符,请先将其用双引号括起来。

答案2

我认为 sed 从你的脚本中得到第五行。您可以将输出发送到另一个文件,然后从那里发送您想要的 sed 行,或者在 bash 中将输出保存到变量,然后 grep 您想要的行。

答案3

我们也可以使用 awk 通过下面的方法来做到这一点

MESSAGE=`sh 2input1output Jojo Ar Dublin| awk 'NR >3 && NR<=5 {print $0}'

相关内容