Como salvar a entrada dinâmica da linha de comando em um arquivo no mesmo formato da entrada usando o script Shell [duplicate]

0

Eu quero salvar a entrada multilinha dinâmica da linha de comando para um arquivo no mesmo formato da entrada.

Por exemplo:

Codifique para obter a entrada dinâmica:

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

Se eu der a mensagem de entrada como abaixo,

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

Em seguida, o Finalinput.txt também deve estar no mesmo formato acima, mas em vez disso está sendo exibido como

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

Devido a este problema, os comandos sed estão substituindo algum padrão errado. Por favor, me ajude a salvar a entrada dinâmica da linha de comando para um arquivo no mesmo formato da entrada usando o script Shell

    
por user2987894 04.07.2016 / 16:16

1 resposta

1

O problema está no echo , pois não fará a coisa certa. Você deve usar aspas duplas em torno da variável ou as novas linhas não serão preservadas:

echo "$message" >Finalinput.txt

Se você quiser, pode fazê-lo de várias formas diferentes, dependendo das suas necessidades. A seguir, o texto é colocado na variável message , mas também é gravado no arquivo de uma só vez:

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

O comando sed obterá a entrada do usuário e a transmitirá para tee , que será duplicada, uma vez para Finalinput.txt e uma vez para a variável message .

Se não houver necessidade de manter o texto em uma variável, apenas

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

funcionará tão bem.

    
por 04.07.2016 / 16:30