bash: Datei teilweise auswerten

Post Reply
Message
Author
Scheibenwelt

bash: Datei teilweise auswerten

#1 Post by Scheibenwelt »

Hallo,

ich habe folgenden Problem. Ich möchte eine config Datei erstellen, die folgendermaßen aussieht:

<BlOCK1>
Werte
</BLOCK1>

<BLOCK2>
Werte
</BLOCK2>

usw.

Frage, wie kann ich nur einen Teil der Datei auslesen, also den zwischen <> und </>. Die Werte zwischen den Blöcken sollen mit einer "for" schleife abgearbeitet werden. In der Art: for X in `cat <bereich>`; do ... done.
Dazu müsste <bereich> halt isoliert sein. Die Werte sind keine Variablen, daher macht ein "source configdatei" keinen Sinn.

Die Scheibweise mit "<>" ist nicht wichtig, wie die Blöcke getrennt werden, ist egal. head/tail geht nicht, weil die Länge der Blöcke variabel sein soll.

Jochen

Re: bash: Datei teilweise auswerten

#2 Post by Jochen »

Also zuerst mal etwas Grundsätzliches.

Da ein File von der Shell immer sequentiell ausgelesen wird, macht es meistens mehr Sinn, das ganze File an Stück zu verarbeiten. Lösungen, die Deine Fragestellung beantworten, werden meist missbraucht: Letzten Endes wird doch das ganze File ausgelesen, aber für jeden einzelnen Block neu geöffnet und durchsucht. Macht bei 10 Blöcken ein 10maliges sequentielles Abarbeiten der Datei, wenn's einmalig auch gereicht hätte.

Wenn Du aber nur einen einzelnen Block brauchst (oder Dich meine Tirade nicht kratzt <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">), kannst Du so vorgehen:<pre>sed -n -e '/<BLOCK1>/,/<\<!--no-->/BLOCK1>/p' < datafile | while read LINE ; do echo $LINE ; done</pre>
Wenn Du die Blockmarkierung variabel halten willst, wird es etwas komplexer:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
BLOCK_ID=BLOCK1
SED_CMD='s/<'"$BLOCK_ID"'>/,/<\<!--no-->/'"$BLOCK_ID"'>/p'

sed -n -e "$SED_CMD" < datafile | while read LINE ; do
echo $LINE
done</font><hr></pre></blockquote>

Jochen

scheibenwelt

Re: bash: Datei teilweise auswerten

#3 Post by scheibenwelt »

Danke. Die Triade stört mich absolut nicht. Da die Datei von verschiedenen Skripen ausgewertet wird, wird sie zwangsweise mehrmals gelesen. Wenn auch leider mehrmals pro Skript, aber das läßt sich wohl nicht ändern.

Post Reply