![如何使用 Shell 脚本将命令行的动态输入保存到与输入格式相同的文件中](https://linux22.com/image/89887/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Shell%20%E8%84%9A%E6%9C%AC%E5%B0%86%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%9A%84%E5%8A%A8%E6%80%81%E8%BE%93%E5%85%A5%E4%BF%9D%E5%AD%98%E5%88%B0%E4%B8%8E%E8%BE%93%E5%85%A5%E6%A0%BC%E5%BC%8F%E7%9B%B8%E5%90%8C%E7%9A%84%E6%96%87%E4%BB%B6%E4%B8%AD.png)
我想将命令行的动态多行输入保存到与输入格式相同的文件中。
例如:
获取动态输入的代码:
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
效果同样好。