Frage

eine Reihe von Daten zu verarbeiten und bekommen sie bereit, in unsere Datenbank eingefügt werden, erzeugen wir eine Reihe von Shell-Skripten. Jeder von ihnen hat etwa 15 Zeilen, eine für jede Tabelle, die die Daten gehen. Ein ein aktueller Importstapel einige der Importdateien fehlgeschlagen in eine bestimmten Tabelle gehen. Also habe ich eine Reihe von Shell-Skripten (etwa 600), wo ich die ersten 7 Zeilen kommentieren, dann die Datei erneut aus. Es gibt etwa 6000 Shell-Skripten in diesem Ordner, und nichts über eine bestimmte Datei kann mir sagen, ob es die Bearbeitung benötigt. Ich habe eine Liste von denen Dateien, die ich aus der Datenbank Ausgang gezogen.

So wie ich einen Bash-Skript schreiben (oder irgendetwas anderes, das besser funktionieren wurde), um diese Liste von Dateinamen zu übernehmen und für jeden von ihnen, kommentiert die ersten 7 Zeilen aus, und führen Sie das Skript?

EDIT:

#!/usr/bin/env sh

cmd1
cmd2
cmd3
cmd4
cmd5
cmd6
cmd7
cmd8

Nicht sicher, wie lesbar das ist. Grundsätzlich sind die ersten 7 Zeilen (die erste Zeile nicht mitgezählt), müssen sie a # zu Beginn hinzugefügt werden. Hinweis: Die Dateien wurden redaktionell bearbeitet von VIM jede Zeile kürzer zu machen und teilweise abgeschnitten zu kopieren. Aber im Hauptteil jeder Datei gibt es eine Zeile mit Echo beginnen, dann einer Zeile mit sqlldr Start

War es hilfreich?

Lösung

Mit sed können Sie eine Zeilennummer Bereich in der Datei angeben, die geändert werden.

#!/bin/bash

while read line
do
    # add a comment to beginning of lines 1 - 7 and rename the script
    sed '3,9 s/^/#/' $line > $line.new
    exec $line.new
done < "filelist.txt"

Sie können dies testen wollen, bevor es auf alle diese Skripte ausgeführt ...

EDIT:. Geändert Zahlen der Linien Kommentare zu reflektieren

Andere Tipps

Grob gesagt:

#!/bin/sh
for file in "$@"
do
    out=/tmp/$file.$$
    sed '2,8s/^/#/' < $file > $out
    $SHELL $out
    rm -f $out
done

Angenommen, Sie kümmern sich nicht für Rennbedingungen über die Überprüfung etc.

ex scheint gemacht für das, was Sie tun möchten.

Zum Beispiel für die Bearbeitung einer Datei mit einem hier Dokument:

#!/bin/sh

ex test.txt << END
1,12s/^/#/
wq
END

Das wird die ersten 12 Zeilen in „test.txt“ Kommentar aus. Für Ihr Beispiel könnten Sie "$FILE" oder ähnliches versuchen (einschließlich Anführungszeichen!).

Dann sie die übliche Art und Weise ausgeführt werden, das heißt ./"$FILE"

edit: $SHELL "$FILE" ist wahrscheinlich ein besserer Ansatz sie (von einem der oben commenters) zu laufen

.

Am Ende wirst du den Linux-Befehl sed verwenden wollen. Was auch immer Logik, die Sie im Skript platzieren müssen, wissen Sie. Aber Ihr Skript wird letztlich sed nennen. http://lowfatlinux.com/linux-sed.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top