Variable in Datei durch Script ergänzen
Hallo, ich habe der Datei "Beispiel". In dieser steht z..B.: Variable1="abc def ghi" Nun möchte ich diese Variable durch ein Script von außen um einen String ergänzen. String ist z.B. xyz Es soll also später in der Datei stehen: Variable1="abc def ghi xyz" Wie stell ich das am geschicktesten an? Ich habs schon mit sed probiert, scheitere aber kläglich wenn der Inhalt der Variable ein Leerzeichen enthält. source Beispiel STRING="xyz" sed -e 's#Variable1=.*$#Variable1="'${Variable1}' '${STRING}'"#g' Beispiel Sobald in Variable1 ein Leerzeichen vorkommt falle ich auf die Nase. Jemand ne Idee wie ich das gelöst bekommen kann? Gruß Daniel -- Daniel Spannbauer Software Entwicklung marco Systemanalyse und Entwicklung GmbH Tel +49 8333 9233-27 Fax -11 Rechbergstr. 4 - 6, D 87727 Babenhausen Mobil +49 171 4033220 http://www.marco.de/ Email ds@marco.de Geschäftsführer Martin Reuter HRB 171775 Amtsgericht München -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am Donnerstag, 16. Februar 2012, 10:38:50 schrieb Daniel Spannbauer:
Hallo,
ich habe der Datei "Beispiel". In dieser steht z..B.:
Variable1="abc def ghi"
Nun möchte ich diese Variable durch ein Script von außen um einen String ergänzen.
String ist z.B. xyz
Es soll also später in der Datei stehen:
Variable1="abc def ghi xyz"
Wie stell ich das am geschicktesten an? Ich habs schon mit sed probiert, scheitere aber kläglich wenn der Inhalt der Variable ein Leerzeichen enthält.
source Beispiel STRING="xyz" sed -e 's#Variable1=.*$#Variable1="'${Variable1}' '${STRING}'"#g' Beispiel
Sobald in Variable1 ein Leerzeichen vorkommt falle ich auf die Nase.
Jemand ne Idee wie ich das gelöst bekommen kann?
Gruß
Daniel
Versuch's mal so: #!/bin/sh var1="abc def" echo "$var1" var1="$var1 ghi" echo "$var1" Jürgen -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 02/16/2012 10:52 AM, schrieb Juergen Langowski:
Am Donnerstag, 16. Februar 2012, 10:38:50 schrieb Daniel Spannbauer:
Hallo,
ich habe der Datei "Beispiel". In dieser steht z..B.:
Variable1="abc def ghi"
Nun möchte ich diese Variable durch ein Script von außen um einen String ergänzen.
String ist z.B. xyz
Es soll also später in der Datei stehen:
Variable1="abc def ghi xyz"
Wie stell ich das am geschicktesten an? Ich habs schon mit sed probiert, scheitere aber kläglich wenn der Inhalt der Variable ein Leerzeichen enthält.
source Beispiel STRING="xyz" sed -e 's#Variable1=.*$#Variable1="'${Variable1}' '${STRING}'"#g' Beispiel
Sobald in Variable1 ein Leerzeichen vorkommt falle ich auf die Nase.
Jemand ne Idee wie ich das gelöst bekommen kann?
Gruß
Daniel
Versuch's mal so:
#!/bin/sh
var1="abc def" echo "$var1"
var1="$var1 ghi" echo "$var1"
Das geht, das ist klar. Abe rich hab in der Datei mehrere solche Zeilen. Ein einfach "echo $var1 > Datei" scheidet also aus. Es stehen auch noch Kommentare in der Datei, die ich unangetastet lassen möchte. Ich könnte das ganze auch mit nem gawk-Script erschlagen. Ich hatte aber gehofft, das ganze durch nen schlanken Einzeiler zu lösen. Gruß Daniel -- Daniel Spannbauer Software Entwicklung marco Systemanalyse und Entwicklung GmbH Tel +49 8333 9233-27 Fax -11 Rechbergstr. 4 - 6, D 87727 Babenhausen Mobil +49 171 4033220 http://www.marco.de/ Email ds@marco.de Geschäftsführer Martin Reuter HRB 171775 Amtsgericht München -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am Donnerstag, 16. Februar 2012, 11:03:08 schrieb Daniel Spannbauer:
Am 02/16/2012 10:52 AM, schrieb Juergen Langowski:
Am Donnerstag, 16. Februar 2012, 10:38:50 schrieb Daniel Spannbauer:
Hallo,
ich habe der Datei "Beispiel". In dieser steht z..B.:
Variable1="abc def ghi"
Nun möchte ich diese Variable durch ein Script von außen um einen String ergänzen.
String ist z.B. xyz
Es soll also später in der Datei stehen:
Variable1="abc def ghi xyz"
Wie stell ich das am geschicktesten an? Ich habs schon mit sed probiert, scheitere aber kläglich wenn der Inhalt der Variable ein Leerzeichen enthält.
source Beispiel STRING="xyz" sed -e 's#Variable1=.*$#Variable1="'${Variable1}' '${STRING}'"#g' Beispiel
Sobald in Variable1 ein Leerzeichen vorkommt falle ich auf die Nase.
Jemand ne Idee wie ich das gelöst bekommen kann?
Gruß
Daniel
Versuch's mal so:
#!/bin/sh
var1="abc def" echo "$var1"
var1="$var1 ghi" echo "$var1"
Das geht, das ist klar. Abe rich hab in der Datei mehrere solche Zeilen. Ein einfach "echo $var1 > Datei" scheidet also aus. Es stehen auch noch Kommentare in der Datei, die ich unangetastet lassen möchte. Ich könnte das ganze auch mit nem gawk-Script erschlagen. Ich hatte aber gehofft, das ganze durch nen schlanken Einzeiler zu lösen.
Ah so. Dann vielleicht so was: cat $INPUTFILE | while read var; do echo "$var xyz" >> $OUTPUTFILE;done Danach die Dateien umbenennen. Diese Lösung hätte noch den Vorteil, dass bei Fehlern nicht das Original zerschossen wird. Jürgen -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am Donnerstag, 16. Februar 2012, 11:03:08 schrieb Daniel Spannbauer: (...)
Das geht, das ist klar. Abe rich hab in der Datei mehrere solche Zeilen. Ein einfach "echo $var1 > Datei" scheidet also aus. Es stehen auch noch Kommentare in der Datei, die ich unangetastet lassen möchte. Ich könnte das ganze auch mit nem gawk-Script erschlagen. Ich hatte aber gehofft, das ganze durch nen schlanken Einzeiler zu lösen.
Gruß
Daniel
Sorry, die letzte Antwort war unvollständig. Wenn du bestimmte Zeilen unangetastet lassen möchtest, wird die Sache für einen Einzeiler etwas kompliziert. Ein Skript mit einer einfachen If-Abfrage in der Schleife (falls Kommentar, tu gar nichts) müsste aber ausreichen. Kann man natürlich auch noch in einen Einzeiler reinpacken, aber wie gesagt, es wird ein bisschen unübersichtlich. Jürgen -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo Daniel, ich biete mal folgendes zur Diskussion: ############################################################################################################################################################## user@server:~> more Beispiel # Kommentar Variable1="abc def ghi" Variable2="xyz" user@server:~> ALT=`grep Variable1 ./Beispiel | cut -f 2 -d \"`; STRING="jkl"; NEU="$ALT $STRING"; sed -e "s#Variable1=.*#Variable1=\"${NEU}\"#g" Beispiel > Beispiel.neu user@server:~> more Beispiel.neu # Kommentar Variable1="abc def ghi jkl" Variable2="xyz" user@server:~> ############################################################################################################################################################## Ist das das, was Du suchst? -- Grüße aus Weimar Thomas Voigt -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo Daniel, hallo Leute, Am Donnerstag, 16. Februar 2012 schrieb Daniel Spannbauer:
ich habe der Datei "Beispiel". In dieser steht z..B.:
Variable1="abc def ghi"
Nun möchte ich diese Variable durch ein Script von außen um einen String ergänzen.
String ist z.B. xyz
Es soll also später in der Datei stehen:
Variable1="abc def ghi xyz"
ergaenzung="xyz" sed '/^Variable1=/ s§"$§'"$ergaenzung"'"§' Ich gehe mal davon aus, dass das Anführungszeichen immer am Zeilenende steht und die Ersetzung kein §-Zeichen enthält. Falls Deine Datei nur Shell-Variablen setzt (was zumindest in Deinem Beispiel der Fall ist), kannst Du auch einfach /usr/sbin/sysconf_addword verwenden ;-) Gruß Christian Boltz --
Liegt nicht an meinem .spec. Das sagt jeder ;-) Naja, aber ich zu Recht ;)) Sagt auch jeder ;-) *SCNR* [> David Haller und Christian Boltz in fontlinge-devel]
-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 02/16/2012 12:40 PM, schrieb Christian Boltz:
Hallo Daniel, hallo Leute,
Am Donnerstag, 16. Februar 2012 schrieb Daniel Spannbauer:
ich habe der Datei "Beispiel". In dieser steht z..B.:
Variable1="abc def ghi"
Nun möchte ich diese Variable durch ein Script von außen um einen String ergänzen.
String ist z.B. xyz
Es soll also später in der Datei stehen:
Variable1="abc def ghi xyz"
ergaenzung="xyz" sed '/^Variable1=/ s§"$§'"$ergaenzung"'"§'
Ich gehe mal davon aus, dass das Anführungszeichen immer am Zeilenende steht und die Ersetzung kein §-Zeichen enthält.
So, so gehts: sed -e 's#Variable1=.*$#Variable1="'"${Variable1}"' '"${STRING}"'"#g' Beispiel
Falls Deine Datei nur Shell-Variablen setzt (was zumindest in Deinem Beispiel der Fall ist), kannst Du auch einfach /usr/sbin/sysconf_addword verwenden ;-)
Das ist einfach nur genial :) Danke Gruß Daniel -- Daniel Spannbauer Software Entwicklung marco Systemanalyse und Entwicklung GmbH Tel +49 8333 9233-27 Fax -11 Rechbergstr. 4 - 6, D 87727 Babenhausen Mobil +49 171 4033220 http://www.marco.de/ Email ds@marco.de Geschäftsführer Martin Reuter HRB 171775 Amtsgericht München -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo Daniel, hier wär noch ne Lösung: string="abc ggg ttt" sed -e 's#\(Variable1=.*\)"#\1 '"${string}"'"#' datei_mit_den_Variablen Am Donnerstag, den 16.02.2012, 10:38 +0100 schrieb Daniel Spannbauer:
Hallo,
ich habe der Datei "Beispiel". In dieser steht z..B.:
Variable1="abc def ghi"
Nun möchte ich diese Variable durch ein Script von außen um einen String ergänzen.
String ist z.B. xyz
Es soll also später in der Datei stehen:
Variable1="abc def ghi xyz"
Wie stell ich das am geschicktesten an? Ich habs schon mit sed probiert, scheitere aber kläglich wenn der Inhalt der Variable ein Leerzeichen enthält.
source Beispiel STRING="xyz" sed -e 's#Variable1=.*$#Variable1="'${Variable1}' '${STRING}'"#g' Beispiel
Sobald in Variable1 ein Leerzeichen vorkommt falle ich auf die Nase.
Jemand ne Idee wie ich das gelöst bekommen kann?
Gruß
Daniel
-- Daniel Spannbauer Software Entwicklung marco Systemanalyse und Entwicklung GmbH Tel +49 8333 9233-27 Fax -11 Rechbergstr. 4 - 6, D 87727 Babenhausen Mobil +49 171 4033220 http://www.marco.de/ Email ds@marco.de Geschäftsführer Martin Reuter HRB 171775 Amtsgericht München
-- Beste Gruesse Christoph Stockmayer --------------------------------------------------- Ingenieurbuero Christoph Stockmayer GmbH Dipl.Ing. Chr. Stockmayer SCLT, CNI, LPIC1, CLA Dreihoehenstr. 1 90571 Schwaig Tel: 0911/505241 Fax: 0911/5009584 eMail: sto@stockmayer.de, christoph.stockmayer@gmx.de ePost: christoph.stockmayer@epost.de WWW: www.stockmayer.de, www.stockmayer.eu Geschaeftsfuehrer: Christoph Stockmayer HRB 1290, Bad Hersfeld, Abt. Rotenburg --------------------------------------------------- -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (5)
-
Christian Boltz
-
Christoph Stockmayer
-
Daniel Spannbauer
-
Juergen Langowski
-
Voigt, Thomas