[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