1

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

2 ответа2

1

Несколько вариантов:

  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. СЭД:

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

Несколько опций (все они бессмысленны и делают то же самое, что и 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
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .