У меня есть куча программ на C от K & R и, конечно, нет возврата. Мне было интересно, если есть способ, чтобы кошка до конца каждого файла (за исключением одной строки до конца, поэтому EOF - 1) оператор "\treturn 0;" включая вкладку перед ним и символ новой строки после него.
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
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
СЭД:
for f in *.c; do sed -i '$i\ \treturn 0;' "$f" done
0
Несколько опций (все они бессмысленны и делают то же самое, что и 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