我正在上一门C ++课程,该课程在每个提交的文件的顶部都需要一个学生标头。键入或猛拉/粘贴非常乏味,我一直在研究一个脚本,只是为我添加它。到目前为止,我已经有了一些对我有用的东西,但是我只是注意到\n,它所操作的文件中任何字符串中的每个字符串都被替换为实际的换行符。我猜想这是由于使用cat或echo在脚本中导致的,而我试图弄清楚如何避免这种情况。
的联机帮助页上echo说,默认行为是忽略反斜杠转义符,但我不完全确定这与我要执行的操作有何关系。
问题出在-e给echo(1)命令提供的参数上,这使它解释\n为新行。删除-e它,它将起作用。我的意思是,当您编写自己的标头时,需要 -e,但应将其移至$(cat $f)“ echo -e” 的外部。例如,在两行中:
echo -e "// $NAME\n// $CLASS\n// $ASSIGNMENT\n// $DATE\n\n" > $f
echo "$(cat $f)" >> $f # notice the double angle >>
但是请注意,这会在读取文件之前将其删除。即使在这里也有问题:
echo“ $(tail -n +6 $ f)”> $ f
因为它可能会在读取文件之前擦除(清空)“ $ f”文件。您可以改为:
newcontent=$(tail -n +6 $f)
echo "$newcontent" > $f
因此,要添加标题,请使用两个不同的回显,但是在写入文件之前先读取文件:
newcontent="$(cat $f)"
echo -e "// $NAME\n// $CLASS\n// $ASSIGNMENT\n// $DATE\n\n" > $f
echo "$newcontent" >> $f # notice the double angle >>
希望对您有所帮助。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。