在多个文件末尾添加文本,减去一行(在 C 中在每个程序末尾添加 return 0;)

在多个文件末尾添加文本,减去一行(在 C 中在每个程序末尾添加 return 0;)

我有一堆来自 K&R 的 C 程序,当然没有 return 语句。我想知道是否有办法将语句“\treturn 0;”连到每个文件的末尾(除了末尾之前的一行,即 EOF - 1),包括它之前的制表符和它之后的换行符。

答案1

一些选项(所有这些都是毫无意义的,并且与 完全相同for f in *c; do echo -e "\treturn 0;" >> "$f"; done):

  1. Perl

    tmp=$(mktemp)
    for f in *c; do
        perl -lpe 'END{print "\treturn 0;"}' "$f" > $tmp && mv $tmp "$f"
    done
    
  2. awk

    tmp=$(mktemp)
    for f in *.c; do
        awk '1;END{print "\treturn 0;"}' "$f" > $tmp && mv $tmp "$f"
    done
    
  3. 将文件放入临时文件中,添加行,然后重命名临时文件:

    tmp=$(mktemp)
    for f in *.c; do
        cat "$f" > $tmp;
        echo -e "\treturn 0;" >> $tmp
        mv $tmp "$f"
    done
    

答案2

一些选项:

  1. Unix:

    tmp=$(mktemp)
    for f in *c; do
        head --lines=-1 "$f" > "$tmp"
        echo -e "\treturn 0;" >> "$tmp"
        tail -1 "$f" >> "$tmp"
        mv "$tmp" "$f"
    done
    
  2. awk:

    tmp=$(mktemp)
    for f in *.c; do
        awk 'NR > 1 { print prev_line; }
                    { prev_line = $0; }
                END { print "\treturn 0;"; print; }' "$f" > "$tmp" \
        &&  mv "$tmp" "$f"
    done
    
  3. sed:

    for f in *.c; do
        sed -i '$i\
    \treturn 0;' "$f"
    done
    

相关内容