출력에서 특정 줄을 가져와 변수에 저장하려면 어떻게 해야 합니까?

출력에서 특정 줄을 가져와 변수에 저장하려면 어떻게 해야 합니까?

이 명령을 실행할 때

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

이제 이 출력의 4번째와 5번째 줄을 표시한 다음 변수에 저장해야 합니다. 나는 열심히 노력했다

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}'

관련 정보