Adicionando texto ao final de múltiplos arquivos, menos uma linha (Adicionando retorno 0; no final de cada programa em C)

1

Eu tenho um monte de programas em C do K & R e, claro, sem declaração de retorno. Eu queria saber se havia uma maneira de gato para o final de cada arquivo (exceto uma linha antes do final, então EOF - 1) a declaração "\ treturn 0;" incluindo a guia antes dele e a nova linha depois dele.

    
por user339365 28.06.2014 / 06:39

2 respostas

0

Algumas opções (todas as quais são inúteis e fazem exatamente o mesmo que 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. Gere o arquivo em um arquivo temporário, adicione a linha e renomeie o arquivo temporário:

    tmp=$(mktemp)
    for f in *.c; do
        cat "$f" > $tmp;
        echo -e "\treturn 0;" >> $tmp
        mv $tmp "$f"
    done
    
por 28.06.2014 / 16:06
1

Algumas opções:

  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
    
por 01.07.2014 / 02:23