当我运行这个命令时
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}'