シェルスクリプトを使用してコマンドラインの動的入力を入力と同じ形式でファイルに保存する方法

シェルスクリプトを使用してコマンドラインの動的入力を入力と同じ形式でファイルに保存する方法

コマンドラインの動的複数行入力を入力と同じ形式でファイルに保存したいと思います。

たとえば、

動的入力用のコードを取得します。

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

効果は同じように良いです。

関連情報