我有一堆来自 K&R 的 C 程序,当然没有 return 语句。我想知道是否有办法将语句“\treturn 0;”连到每个文件的末尾(除了末尾之前的一行,即 EOF - 1),包括它之前的制表符和它之后的换行符。
答案1
一些选项(所有这些都是毫无意义的,并且与 完全相同for f in *c; do echo -e "\treturn 0;" >> "$f"; done
):
Perl
tmp=$(mktemp) for f in *c; do perl -lpe 'END{print "\treturn 0;"}' "$f" > $tmp && mv $tmp "$f" done
awk
tmp=$(mktemp) for f in *.c; do awk '1;END{print "\treturn 0;"}' "$f" > $tmp && mv $tmp "$f" done
将文件放入临时文件中,添加行,然后重命名临时文件:
tmp=$(mktemp) for f in *.c; do cat "$f" > $tmp; echo -e "\treturn 0;" >> $tmp mv $tmp "$f" done
答案2
一些选项:
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
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
sed:
for f in *.c; do sed -i '$i\ \treturn 0;' "$f" done