コマンドラインの動的複数行入力を入力と同じ形式でファイルに保存したいと思います。
たとえば、
動的入力用のコードを取得します。
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
効果は同じように良いです。