PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Texte in einer Datei in einer bestimmten zeile einzufügen



geist_der_foren
25.06.2004, 13:17
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:

#======================================
# 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:
# User Alias - TEST1
# ------------------
#
User_Alias TEST1 = test_user1
Am schluss soll die Datei folgender masen aussehen

#======================================
# 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 ?

hehejo
25.06.2004, 15:27
Wie wäre es denn damit,
du öffnest die Datei und liest eben solange ein, bis du deinen Header gefunden hast.
Wenn es dir nicht auf die Reihenfolge ankommt, kannste dann ja etwas neues hinzufügen.

Also Datei bis dahin in einen String. String um das Neue vergrößern. Rest der Datei an String ranhängen und den String dann komplett in die Datei schreiben.

geist_der_foren
28.06.2004, 10:11
Als erstes danke für dein Post...

Ich hab es mir folgender maßen vorgestellt, ich such mit diesem code di Zeilen nummer raus und Subtrahire 2 Zeilen, damit ich an der Zeile bin, in dem der Text eingefühgt werden soll
LINE=$(( $( awk '/^# User alias specification.*ENDE/{ print NR }' $FILE ) - 2 ))
Dann würde ich mit dem sed an dier Zeile den Text einfügen
sed optionen 'zeile text' >> $FILE Aber leider bekomme ich das mit sed nicht gebacken ... hast du eine Anhung wie ich das lösen könnte ? :help:

hehejo
28.06.2004, 15:58
Bof, sowas hab ich noch nicht gemacht.
Aber warum willst du das mit SED reinschreiben?

geist_der_foren
28.06.2004, 16:38
Warum ? Weil mir nicht besseres eingefallen ist ... :]
Im sed gibt es eine Option -i, mit der man direkt in der Datei rein schreiben kann, ich hab es dann folgendermasen geregelt:
# VARIABLEN
# ---------
#
FILE=test_sudo2
TEXT_NR=$(( $( awk '/^# User alias specification.*ENDE/{ print NR }' $FILE ) - 2 ))

# PROGRAMM
# --------
#
while read TEXT
do
sed -i "$TEXT_NR a\ $TEXT" $FILE
TEXT_NR=$((TEXT_NR+1))
done < a


Somit schreibt er mir das gleich in die Datei rein...
Aber die Ausgabe sieht dann folgendermasen aus:
#======================================
# User alias specification **ANFANG**
#======================================


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

# User Alias - TEST2
# ------------------
#
User_Alias TEST2 = test_user2
#======================================
# User alias specification **ENDE**
#======================================


Er macht blöder weiße mir einen Leerzeichen rein, da ich in meinen code folgendes drinstehen hab
sed -i "$TEXT_NR a\ $TEXT" $FILE Das leerzeichen nach \a $TEXT wird auch eingefügt :( Wie kann ich da unterbinden ? Ich hab schon folgendes Probiert
sed -i "$TEXT_NR a\ {$TEXT}" $FILE Hat aber nicht gefunkt, weil er mir das auch mit reingebracht hat und er mir dann folgendes aus gegeben hat:
#======================================
# User alias specification **ANFANG**
#======================================


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

{# User Alias - TEST2}
{# ------------------}
{#}
{User_Alias TEST2 = test_user2}
#======================================
# User alias specification **ENDE**
#======================================




EDIT:

Lange habe ich probiert, dass ich nicht gleich drauf gekommen bin !
Also so funktioniert das:
sed -i "$TEXT_NR a\\$TEXT" $FILE
Ich hab den entgültingen code noch nicht fertig, ich werde wenn ihr möchtet mein skript dann posten ...
Das skript soll am schluss folgendes können, es werden 3 Datein erstellt, in dem die Definitionen für die Sudoers stehen, wenn man das Skript ausführt, werden diese Definitionen über das skript automatisch in die Sudo eingetragen... Das wird dann über scp an alle server Copiert und dann ausgeführt. Das erleichert einem wirklich viel arbeit...

Ich möchte mich bei allen bedanken, die mir hier geholfen haben . DANKE !

gruß

geist_Der_foren