• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] Text in Datei in einer bestimmten zeile einzufügen

Hi @all,

gibt es eine möglichkeit Texte in einer Datei in einer bestimmten zeile einzufügen ? Ich hab z.B. eine Datei mit folgenden layout:
Code:
#======================================
# User alias specification   **ANFANG**
#======================================


# User Alias - TEST1
# ------------------
#
User_Alias TEST1 = test_user1


#======================================
# User alias specification     **ENDE**
#======================================
In dieser Datei würde ich gerne noch folgendes einfügen:
Code:
# User Alias - TEST1
# ------------------
#
User_Alias TEST1 = test_user1
Am schluss soll die Datei folgender masen aussehen
Code:
#======================================
# User alias specification   **ANFANG**
#======================================


# User Alias - TEST1
# ------------------
#
User_Alias TEST1 = test_user1


# User Alias - TEST2
# ------------------
#
User_Alias TEST2 = test_user2


#======================================
# User alias specification     **ENDE**
#======================================
Hat jemand eine IDEE wie ich sowas für ein skript realisiren könnte ?
 

Grafula

Newbie
Viel einfacher waere es natuerlich wenn nicht all diese comments in der datei waeren...

Trotzdem, mit Perl ginge es folgendermassen:

Code:
#!/usr/bin/perl

# Frag nach der einzufuegenden zeile
#(also z.B. "User_Alias TEST4 = test_user4"):
$neue_zeile = &prompt_user("\nZeile einfuegen: ");

#das ist die Datei die Du bearbeiten willst
$filename = "/usr/home/user/testdatei";

#Die naechste Variable enthaelt den Text mit dem die Datei beginnt:
$top_text = "#======================================\n";
$top_text .= "# User alias specification   **ANFANG**\n";
$top_text .= "#======================================\n\n";

#Die naechste Variable enthaelt den Text mit dem die Datei endet:
$bottom_text = "#======================================\n";
$bottom_text .= "# User alias specification     **ENDE**\n";
$bottom_text .= "#======================================\n";

#jetzt die ganze datei in das Array @active_content einlesen
#und alle leeren oder commentierten zeilen weglassen
open(FILE, $filename) || die "cannot open $filename";
        while ($line = <FILE>) {
                unless ($line =~ /^#/ || $line =~ /^$/) {
                        chomp($line);
                        push @active_content, $line;
                }
        }
close(FILE);

# jetzt den beim prompt eingegebenen wert zum Array hinzufuegen
push @active_content, $neue_zeile;

#jetzt den Inhalt der Datei neu in die variable $neu_txt schreiben:
$neu_txt = "$top_text\n";
foreach $line (@active_content) {
        @tmp = split /=/, $line;
        $neu_txt .= "# $tmp[0]\n# ------------------\n#\n$line\n\n\n";
}

$neu_txt .= "$bottom_text\n";

open(FILE, ">$filename") || die "cannot open $filename for writing";
        print FILE $neu_txt;
close(FILE);

print "\nDas ist die neue Datei:\n$neu_txt";
print "\n\n...und Tschuess\n\n";


sub prompt_user {
        local($promptString) = @_;
        print $promptString;
        $| = 1;               # force a flush after our print
        $_ = <STDIN>;         # get the input from STDIN (presumably the keyboard)
        chomp;
        return $_;
}
Ist zwar etwas umstaendlich geschrieben, macht es aber verstaendlich (hoffe ich).
Allerdings sollte man da noch den input auf validitaet pruefen!!
Auch sollte man die Datei mit flock waerend des Schreibens schuetzrn wenn mehrere user die datei bearbeiten duerfen.
 
Oben