开发者社区> 问答> 正文

使用涉及echo的Shell脚本将学生标头添加到C ++文件中:用实际的换行符替换\ n,是否可以更

我正在上一门C ++课程,该课程在每个提交的文件的顶部都需要一个学生标头。键入或猛拉/粘贴非常乏味,我一直在研究一个脚本,只是为我添加它。到目前为止,我已经有了一些对我有用的东西,但是我只是注意到\n,它所操作的文件中任何字符串中的每个字符串都被替换为实际的换行符。我猜想这是由于使用cat或echo在脚本中导致的,而我试图弄清楚如何避免这种情况。

的联机帮助页上echo说,默认行为是忽略反斜杠转义符,但我不完全确定这与我要执行的操作有何关系。

展开
收起
游客ufivfoddcd53c 2020-01-04 10:56:47 1071 0
1 条回答
写回答
取消 提交回答
  • 问题出在-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 >>
    
    

    希望对您有所帮助。

    2020-01-04 10:57:33
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载