[section] - consolentool zum parsen eines ini-formats

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Pischti
Beiträge: 417
Registriert: 20.02.2002 12:54:18
Wohnort: dresden

[section] - consolentool zum parsen eines ini-formats

Beitrag von Pischti » 18.12.2006 21:50:05

hi, für größere scripte nutze ich eine config-datei, nu langsam wirds wegen der vielen einträge undurchsichtig.
gibts einconsolen- tool, welches ein ini-format (z.b. wie in der smb.conf) auslesen kann, ala

Code: Alles auswählen

[section1]
  key1 = bla
  key2 = blub

[section2]
  key1 = wurst
  ....
gruss pischti
debian stable

yeti

Beitrag von yeti » 19.12.2006 04:21:54

AWK.

[matzi]
Beiträge: 16
Registriert: 20.05.2005 11:25:26
Wohnort: Weinheim
Kontaktdaten:

Beitrag von [matzi] » 19.12.2006 07:59:21

Mit perl geht's noch einfacher als mit awk. Schau dir das mal an: http://search.cpan.org/~kirsle/Config-I ... /Simple.pm

Benutzeravatar
Pischti
Beiträge: 417
Registriert: 20.02.2002 12:54:18
Wohnort: dresden

Beitrag von Pischti » 19.12.2006 10:08:24

danke erstmal für die antworten.
hat vielleicht jemand ein kleines beispiel für awk? hab mit awk noch nich soviel gemacht.
ich würde mir dann das ganze in eine kleine bash funktion auslagern ...
gruss pischti
debian stable

yeti

Beitrag von yeti » 19.12.2006 18:27:15

Wenn das eh was Selbstgeschriebenes ist und somit das Configfileformat in Deinen Händen liegt, dann nimm doch das, was Bash am Besten kann: Ein Shellskriptfragment mit Zuweisungen an Variablen und ggfs auch Funktionen.

Warum dann unbedingt dieses kranke aus einer noch kränkeren Welt abgeguggte oben erwähnte Format?

Benutzeravatar
Pischti
Beiträge: 417
Registriert: 20.02.2002 12:54:18
Wohnort: dresden

Beitrag von Pischti » 19.12.2006 20:07:13

ich wollte hier eigentlich keine grundsatzdiskussion heraufbeschwören, aber warum dieses format:
- weil es simple ist und jeder dau versteht
- weil es weit verbreitet und akzepiert (naja :-)) ist ( und deshalb sicher auch seine einsatzberechtigung hat)
- weil ich mir kein neues ausdenken will, wen es so was schon gibt
- mir persönlich würde xml am besten gefallen, aber der aufwand auf der konsole ist da da einfach zu hoch

wenn ich falsch liege, berichtige mich bitte. vielleicht hast du ja eine gute idee für so ein format?
vorraussetzung für mich ist, das ich ohne große zusatzprogramme so eine ini parsen kann, damit ich es an vielen stellen benutzen kann.

hab mir nun mittlerweile selbst ein script zum ini.parsen geschrieben, was auf grep,sed, tail und head basiert. sicher nicht die beste lösung. posten wollte ich es hier auch nicht, weil es ganz doch schön schusterwerk ist ( :oops: ) aber es funktioniert :) wer's haben will, kann mir ja eine PN schicken ...
gruss pischti
debian stable

aspettl
Beiträge: 318
Registriert: 15.02.2006 22:05:37
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Beitrag von aspettl » 19.12.2006 21:01:15

yeti hat doch ein mögliches Format genannt: Einfach ein Skript, das nur Variablen füllt.

Gruß
Aaron

Benutzeravatar
Pischti
Beiträge: 417
Registriert: 20.02.2002 12:54:18
Wohnort: dresden

Beitrag von Pischti » 20.12.2006 00:33:00

Einfach ein Skript, das nur Variablen füllt.
und eben das langt mir eben nicht aus. mein script soll in abhängigkeit von argumenten/parametern eben bestimmte werte aus der config auslesen. beispiel:

Code: Alles auswählen

./meinscript.sh wks

Code: Alles auswählen

# config.ini
[wks]
  kernel = 2.6.8w5
  module = base ssh xorg 

[backup]
  kernel = 2.6.8b3
  module = base drdb ssh

[game]
  kernel = 2.6.8.g18
  module = base xorg game nfs
das ganze soll also beliebig erweiterbar sein. als hintergrund: das script baut in abhängigkeit der config boot- images für diskless-maschinen zusammen (tftp). wenn ich also einen neuen image-typ brauche, will ich einfach nur eine weitere config (sprich section) hinzufügen - und nicht neue varibalen mit neuem namen ala

Code: Alles auswählen

wks_kernel=2.6.8w5
wks_module="base ssh xorg"
zusammenbauen.

bitte nicht falsch verstehen, ich wollte ursprünglich eigentlich nur wissen, wie man am einfachsten (und natürlich elegantesten) eine ini.datei parst ... :wink:
gruss pischti
debian stable

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 20.12.2006 00:43:55

Pischti hat geschrieben:ich wollte ursprünglich eigentlich nur wissen, wie man am einfachsten (und natürlich elegantesten) eine ini.datei parst
vielleicht mit einem Perl Oneliner

Code: Alles auswählen

gms@gms1:~$ perl -e '$param=shift; while(<>){$sec=$1 if /\[(.*)\]/;print "$1=$2\n" if /\s*(.*)\s*=\s*(.*)\s*/ && $sec eq $param}' wks config.ini
kernel =2.6.8w5
module =base ssh xorg
gms@gms1:~$ perl -e '$param=shift; while(<>){$sec=$1 if /\[(.*)\]/;print "$1=$2\n" if /\s*(.*)\s*=\s*(.*)\s*/ && $sec eq $param}' backup config.ini
kernel =2.6.8b3
module =base drdb ssh
gms@gms1:~$ perl -e '$param=shift; while(<>){$sec=$1 if /\[(.*)\]/;print "$1=$2\n" if /\s*(.*)\s*=\s*(.*)\s*/ && $sec eq $param}' game config.ini
kernel =2.6.8.g18
module =base xorg game nfs
Gruß
gms

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 20.12.2006 10:38:31

Wenn schon Perl, dann würde ich obiges Modul nehmen. Deutlich einfacher und sicherer als eigene Regexes zu schnitzen. Man muss ja nicht immer das Rad neu erfinden ;)

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 20.12.2006 12:46:51

nepos hat geschrieben:Wenn schon Perl, dann würde ich obiges Modul nehmen. Deutlich einfacher und sicherer als eigene Regexes zu schnitzen. Man muss ja nicht immer das Rad neu erfinden ;)
Keine Ahnung was Pischti wirlich vorhat. Es ist daher auch durchaus möglich, daß deine generalisierende Aussage auch auf seine Situation zutrifft. :wink:
Den Kopf hat man jedenfalls immer dabei, die Installation eines zusätzlichen Perlmoduls ist jedoch nicht in allen Situationen erwünscht. Außerdem hält mein einfach gestrickter Perl Oneliner den Vergleich mit der großartigen Erfingung des Rades einfach nicht stand :)

Gruß
gms

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 20.12.2006 12:55:02

Schauen wir halt mal, was er sagt :)
Ich tendiere halt eher dazu, für solche Sachen fertige und getestete Module zu nutzen, als gleich was eigenes zu bauen, das dann wieder Bugs enthalten könnte. Hängt aber sicherlich auch mit dem Umfeld, in dem man unterwegs ist, zusammen. Auf nem kritischen Server installiert man sicher nicht mal einfach fix zusätzliche Software, auch wenns nur ein Perl-Modul ist.

Benutzeravatar
Pischti
Beiträge: 417
Registriert: 20.02.2002 12:54:18
Wohnort: dresden

Beitrag von Pischti » 03.01.2007 11:49:46

danke nochmal für die antworten. ich werd das perl-script nicht nehmen, weil das perl-modul erst installiert werden müsste (soll auf nem ganz schmalen diskless system laufen)
hab es wie oben schon erwähnt mit nem mix aus head, tail und konsorden umgesetzt und funktioniert ...
gruss pischti
debian stable

Antworten