Hinzufügen von Text am Ende mehrerer Dateien minus einer Zeile (Hinzufügen von Ergebnis 0; am Ende jedes Programms in C)

763
user339365

Ich habe eine Reihe von C-Programmen von K & R und natürlich keine Rückkehrerklärung. Ich habe mich gefragt, ob es eine Möglichkeit gibt, bis zum Ende jeder Datei (außer einer Zeile vor dem Ende, also EOF - 1) die Anweisung "\ treturn 0;" einschließlich des Tabs davor und des Newlines danach.

1
Willkommen bei Super User! Bitte * immer * fügen Sie Ihr Betriebssystem hinzu. Lösungen hängen sehr oft vom verwendeten Betriebssystem ab. Verwenden Sie Windows, Unix, Linux, BSD, OSX oder etwas anderes? Welche Version? terdon vor 9 Jahren 0

2 Antworten auf die Frage

1
Scott

Einige Optionen:

  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

Einige Optionen (alle sind sinnlos und machen genau das gleiche 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. Kopieren Sie die Datei in eine temporäre Datei, fügen Sie die Zeile hinzu und benennen Sie die temporäre Datei um:

    tmp=$(mktemp) for f in *.c; do cat "$f" > $tmp; echo -e "\treturn 0;" >> $tmp mv $tmp "$f" done 
Ich bin verblüfft, warum das OP diese Antwort akzeptiert hat, da es nicht das ist, wonach er gefragt hat. Alle drei Optionen hängen einfach die `return` -Anweisung an die Datei an. Dies kann einfach über` echo -e "\ treturn 0" >> "$ f" `erfolgen. Die Frage stellt jedoch die Frage, wie die Rückgabeanweisung vor der letzten Zeile _injektiert werden soll. (Außerdem haben Sie das Semikolon weggelassen.) PS Herzlichen Glückwunsch zum Gewinn der Wahl. Scott vor 9 Jahren 0
@Scott nicht mehr verwirrt als ich, um dir die Wahrheit zu sagen. Was "echo >> file" angeht, hatte ich ein ernstes Problem zwischen der Tastatur und meinem Gehirn. Aus irgendeinem Grund, an den ich mich nicht mehr erinnern kann, dachte ich, dass diese Ansätze etwas anderes machen. Vermutlich dachte ich über etwas nach, wie Ihre Antwort funktioniert, und beschloss dann, das Rad neu zu erfinden. Ich kann nicht viel dagegen tun, da es akzeptiert wird, aber Sie können es ebenso gut abstimmen, so dass sich wenigstens Ihre erheben wird. PS Danke :) terdon vor 9 Jahren 0