[linux-l] shell skript probleme mit leerzeichen

Klaus Gerhardt k-gerhardt at gmx.de
Do Okt 27 21:23:15 CEST 2005


Hallo Lutz,

willek wrote:
> Danke, das funktioniert, obwohl ich nicht verstehe warum. Warum reicht
> in diesen Fall ein Stern aus, um alle Dateien einzulesen?
Dies wird in der bash unter pattern matching behandelt. Du kannst zum 
bearbeiten von Dateien "Muster" verwenden mit denen du die Datei 
beschreibst. Diese Muster enthalten wildcards. Der * ist so eine wildcard.

	http://linuxseiten.kg-it.de/index.php?index=bash_Wildcards

Wenn du mit so einem Muster arbeitest erweitert die Shell alle Dateien 
die dem Muster entsprechen zu einer Dateiliste. Wenn du ein Verzeichnis 
mit den Dateien

	foo bar und foobar

hast und

	echo ls *

eingibst. Kannst du dieses Verhalten beobachten.

  > Und noch eine Verständnisfrage:
> Ich wollte die Leerzeichen maskieren, etwa so:
> for i in `ls |sed s/" "/"\\ "/g` ; do
> warum hat das nicht funktioniert?
Wofür wird überhaupt maskiert? Du maskierst ein Zeichen, damit es von 
der Shell wie ein ganz normales Zeichen behandelt wird und nicht wie ein 
Zeichen mit einer speziellen Funktion. Zeichen mit besonderer Funktion 
sind z.B.

	?, +, {, |, (, ), ., ", \

Das einzige was du da maskierst ist also der "\". Du sagst zu sed:
ersetzte ein Leerzeichen durch ein Leerzeichen und einen Backslash. 
Wobei dein Konstrukt wahrscheinlich nicht funktioniert. So ist es wohl 
eher richtig:

	sed 's/[[:space:]]/\\ /g'

Wenn ich dir dann noch meine Webseiten zu dem Thema unterschieben darf ;-)

	http://linuxseiten.kg-it.de/index.php?index=bash_Der_Befehl_grep
	http://linuxseiten.kg-it.de/index.php?index=bash_Der_Befehl_sed


Grüsse
Klaus

-- 
Klaus Gerhardt * Holsteinische Str. 13 * 10717 Berlin
+49 (30) 8620 1523 * k-gerhardt at gmx.de
http://www.kg-it.de * http://linuxseiten.kg-it.de



Mehr Informationen über die Mailingliste linux-l