• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Die Bash Verzweiflung - ls und co

Mit viel Unterstützung hab ich jetzt folgende Lösungen:
Und ich muss sagen, absolut tricky und ohne Hilfe eines Experten - hätte ich vorher aufgegeben.

Code:
a)    ls -al | grep \.

c)     ls -a | egrep ^[.]\{1\}

d)    ls -a | grep [.] . $

e)    ls -a | egrep [.][0-9]\{1\}$

f)     ls -a | egrep [.][a-zA-Z]\{1\}$
 
A

Anonymous

Gast
Du hast dir sehr viel Mühe gegeben und sicherlich einiges über Reguläre Ausdrücke gelernt, aber meiner Meinung nach das eigentliche Thema verfehlt. Aufgabe ist :
Geben sie mit dem Kommando ls alle Dateien aus,
a. die ............
und nicht : gib mit ls alle Dateien aus und filtere daraus folgende Dateiennamen aus ........

Hättest dich vielleicht doch mal mit den Suchbegriffen beschäftigen sollen die ich dir gegeben habe.

Nehme an man wollte so was hier sehen, (habe so meine Erfahrungen damit (habs im Urin) was bei solchen ungenauen und uneindeutigen Fragestellungen gemeint ist) mache mal einige falsche mit dazwischen, dass du den Kopf noch etwas beschäftigen kannst.
Code:
ls *.*
ls .*.
ls .*
ls .[!.]*
ls [!.].*
ls *.?
ls ?.*
ls *.[0-9]
ls [0-9].[!0-9]
ls *.[A-Z,a-z]
ls *.[!0-9]

viel Spaß beim weiterlernen.

robi
 
Stefan Stäglich schrieb:
Wie du schon richtig bemerkt hast ist die Aufgabe e) nicht eindeutig. 99,9 ist z.B. auch eine Zahl. Die Aufgabe sagt nicht welche Zahlen berücksichtigt werden sollen und wieviel Stellen die haben.
Ich weiß, dass ich recht habe. :wink: :wink:

Aber da die Lösung für Zahlen (wahrscheinlich natürliche Zahlen inklusive Null) immer noch ausbleibt - hier ist sie:
Code:
ls -d *.+([0-9])
Eine universellere Lösung, unabhängig von der shop "dotglob", ist:
Code:
ls -d ?*.+([0-9]) .+([0-9])
Beides funktioniert aber nur, wenn in der bash die shopt "extglob" gesetzt ist, was standardmäßig der fall ist. Dem 0-9 könnte man bei Bedarf auch Minuszeichen, Komma usw. bei Bedarf hinzufühen.
 
A

Anonymous

Gast
Die Aufgabe hieß
die einen Punkt gefolgt von einer Zahl am Ende enthalten.

meiner Erfahrung nach kenne die Ersteller solcher Fragen durchaus den Unterscheid zwischen Ziffer und Zahl (na hoffentlich), aber sie schreiben dennoch immer Zahl und meinen Ziffer. Wenn sie Zahl meinen, dann spezifizieren sie diese näher, als Ganzzahl, Fließkomma, uä.

Zum gesammtem Pool der Zahlen gehören ja sonst auch noch zB Brüche, Komplexe Zahlen, und Feste Zahlenausdrücke wie "e" und "Pi"
Wenn da so ein Delinquent von einem Schüler eine Lösung findet die wirklich etwas mehr abdecken sollte als der Aufgabensteller vorgesehen hat, dann sind die Korrekturleser sonst maßlos überfordert, da sie im Lehrstoff manchmal nur ein paar Seiten weiter im Stoff sind. :wink:

Die meisten Mathematiklehrer zB sind eh der Meinung, dass die "große Hälfte" ihre Schüler den Lehrstoff sowieso nie verstehen. :lol:

robi
 
robi schrieb:
meiner Erfahrung nach kenne die Ersteller solcher Fragen durchaus den Unterscheid zwischen Ziffer und Zahl (na hoffentlich), aber sie schreiben dennoch immer Zahl und meinen Ziffer.
In diesem Fall wäre die korrekte Lösung aus meiner Sicht folgende:
Code:
ls -d .[0-9] ?*.[0-9]
Das sollte unabhängig von allen shopts sein. Zur Erklärung:
-d steigt nicht in Unterverzeichnisse ab
.[0-9] listet alle Dateien auf, deren Namen aus einem Punkt gefolgt von einer Ziffer besteht.
?*.[0-9] listet alle Dateien auf, deren Name mit mindestens einem beliebigen Zeichen beginnt, und auf Punkt und Ziffer endet.
 
Beispiel c) verwende ich praktisch: Manchmal erstelle ich einen neuen Benutzer und möchte diesem die Konfigurationsdateien meines Standardbenutzers, sagen wir z.B. auch aus /home/1/.mc, übertragen. Dabei muß ich auch die versteckten Benutzerdateien rüberkopieren.

cp -r /home/1/.* /home/2/

würde dann aber auch /home/1/.. erfassen, und das wäre (als root) gar nicht gut.
Dieser Thread ist für mich als Benutzer also schon ganz hilfreich.

Beste Grüße
 
Probier mal folgendes:

Code:
cp -r /home/1/.??* /home/2/

Die zwei Fragezeichen schließen die Abkürzung für das übergeordnete Verzeichnis aus (".."), weil nur Treffer gültig sind, die nach dem Punkt mind. zwei weitere Zeichen haben. Sollte es allerdings ein verstecktes Verzeichnis mit genau einem Zeichen geben, wird es auch ausgeschlossen (etwa so was wie "/home/1/.x").

Es gibt mit Sicherheit bessere Lösungen.
 
Oben