Добавление текста в конец нескольких файлов, минус одна строка (Добавление возврата 0; в конце каждой программы на C)

685
user339365

У меня есть куча программ на C от K & R и, конечно, нет возврата. Мне было интересно, если есть способ, чтобы кошка до конца каждого файла (за исключением одной строки до конца, поэтому EOF - 1) оператор "\ treturn 0;" включая вкладку перед ним и символ новой строки после него.

1
Добро пожаловать в Супер пользователя! Пожалуйста, всегда включайте вашу ОС. Решения очень часто зависят от используемой операционной системы. Вы используете Windows, Unix, Linux, BSD, OSX, что-то еще? Какая версия? terdon 9 лет назад 0

2 ответа на вопрос

1
Scott

A few options:

  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 
0
terdon

Несколько вариантов (все из которых бессмысленны и делают точно так же, как for f in *c; do echo -e "\treturn 0;" >> "$f"; done):

  1. Perl

    tmp=$(mktemp) for f in *c; do perl -lpe 'END' "$f" > $tmp && mv $tmp "$f" done 
  2. AWK

    tmp=$(mktemp) for f in *.c; do awk '1;END' "$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 
Я озадачен тем, почему ОП принял этот ответ, так как это не то, что он просил. Все три параметра просто добавляют оператор `return` в файл, что можно легко сделать с помощью` echo -e "\ treturn 0" >> "$ f" `. Но вопрос состоит в том, как _инжектировать_ оператор `return` перед последней строкой. (Также вы оставили точку с запятой.) PS Поздравляю с победой на выборах. Scott 9 лет назад 0
@ Скотт не более озадачен, чем я, чтобы сказать вам правду. Что касается `echo >> file`, у меня возникла серьезная проблема между клавиатурой и мозгом. По какой-то причине, которую я больше не помню, я думал, что эти подходы делают что-то другое. Предположительно, я думал о чем-то вроде того, что делает ваш ответ, а затем решил заново изобрести колесо. Я не могу ничего с этим поделать, так как это принято, но вы можете также дать ему отрицательное голосование, чтобы, по крайней мере, ваше возвысилось. PS Спасибо :) terdon 9 лет назад 0

Похожие вопросы