쉘 스크립트를 사용하여 명령줄의 동적 입력을 입력과 동일한 형식으로 파일에 저장하는 방법

쉘 스크립트를 사용하여 명령줄의 동적 입력을 입력과 동일한 형식으로 파일에 저장하는 방법

명령줄의 동적 여러 줄 입력을 입력과 동일한 형식으로 파일에 저장하고 싶습니다.

예를 들어:

동적 입력을 위한 코드를 가져옵니다.

echo "Enter the multi-line message"
message=$(sed '/one.*/q')
echo $message > Finalinput.txt

아래와 같은 입력 메시지를 주면,

Subject: Subject for the file
Date: Friday, June 11, 2016 @ 02:00am - 06:00am 
Time: 02:00am - 06:00am 


Test message Test message Test message Test message Test message
Test message Test message Test message Test message Test message
Test message Test message Test message Test message Test message
Test message Test message Test message Test message Test message
Test message Test message Test message Test message Test message
Test message Test message Test message Test message Test message

Sincerely,
xxxxx

그러면 Finalinput.txt위와 같은 형식이어야 하지만 다음과 같이 표시됩니다.

Subject: Subject for the file Date: Friday, June 11, 2016 @ 02:00am - 06:00am Time: 02:00am - 06:00am Test message Test message Test message Test message Test messageTest message Test message Test message Test message Test messageTest message Test message Test message Test message Test messageTest message Test message Test message Test message Test messageTest message Test message Test message Test message Test messageTest message Test message Test message Test message Test message
Sincerely,
xxxxx

이 문제로 인해 sed 명령은 일부 잘못된 패턴을 대체합니다. 쉘 스크립트를 사용하여 입력과 동일한 형식으로 명령줄의 동적 입력을 파일에 저장할 수 있도록 도와주세요.

답변1

문제는 echo그것이 옳은 일을 하지 않는다는 것이다. 변수 주위에는 큰따옴표를 사용해야 합니다. 그렇지 않으면 줄 바꿈이 유지되지 않습니다.

echo "$message" >Finalinput.txt

원한다면 필요에 따라 다양한 방법으로 수행할 수 있습니다. 다음 코드는 텍스트 message를 파일에 쓰는 동안 변수에 텍스트를 넣습니다.

message="$( sed '/one.*/q' | tee Finalinput.txt )"

sed명령은 사용자로부터 입력을 받아 tee이를 복사하는 개체에 한 번은 변수로 Finalinput.txt, 한 번은 변수로 전달합니다 message.

변수에 텍스트를 전혀 저장할 필요가 없다면 그냥

sed '/one.*/q' >Finalinput.txt

효과는 똑같이 좋습니다.

관련 정보