如何使用 Shell 脚本将命令行的动态输入保存到与输入格式相同的文件中

如何使用 Shell 脚本将命令行的动态输入保存到与输入格式相同的文件中

我想将命令行的动态多行输入保存到与输入格式相同的文件中。

例如:

获取动态输入的代码:

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 命令正在替换一些错误的模式。请帮助我将命令行的动态输入保存到与使用 Shell 脚本输入相同的格式的文件中

答案1

问题在于echo它不会做正确的事。您应该在变量周围使用双引号,否则换行符将不会被保留:

echo "$message" >Finalinput.txt

如果您愿意,您也可以根据您的需要通过多种不同的方式来实现。下面的代码将文本放入message变量中,同时将其写入文件:

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

sed命令将从用户处获取输入并将其传递给tee复制它的对象,一次复制到变量Finalinput.txt中,一次复制到变量中message

如果根本不需要将文本保存在变量中,那么只需

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

效果同样好。

相关内容