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.
bash: Datei teilweise auswerten
Re: bash: Datei teilweise auswerten
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
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
Re: bash: Datei teilweise auswerten
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.