Mit grep oder egrep nur Dateinamen ausgeben?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

grep selber kann ja nicht auf das direktory zugreifen also muss es irgenwas geben was das erstmal liefert

grep -oP 'asterix *\w+ *\d+ *\d+. \w+ \d+:\d+ \K(\w+.\w+)' < <(ls -all)

das \K extrahiert nur das was du von der Zeile brauchst .

ergänzt mit hilfe von @whgoffline

find . -maxdepth 1 -user asterix

Geht zwar sicher irgendwie auch mit grep, aber dann entsprechend um einiges komplizierter. Man kann ja nämlich nicht einfach im ls output nach asterix suchen, da man dann ja auch z.B.

-rw-r--r--. 1 matecki users 42 3. Feb 16:04 komischerDateiNameMit_asterix.c

finden würde :/

Jockelii7500 
Fragesteller
 02.07.2022, 18:34

Danke für die Antwort, es wurde leider ausdrücklich gesagt dass ich nur grep oder egrep benutzen darf, wahrscheinlich um es schwerer zu machen lol

0
whgoffline  02.07.2022, 18:47
@Jockelii7500

Meine beste und einzige Idee wäre folgender regex

[rw-]{10}. [0-9]+ asterix .*
1
Jockelii7500 
Fragesteller
 02.07.2022, 18:52
@whgoffline

Was macht das rw und die 10 am Anfang? Also ich weiß für was rw steht, nur nicht in diesem Kontext

0
whgoffline  02.07.2022, 19:04
@Jockelii7500

Naja vorab habe ich da leider einen größeren Fehler gemacht, da ja auch x,d,c,b, und l in dem ersten Teil der ls Ausgabe erlaubt wären.

Das müsstest du Mal recherchieren was da alles für deine Aufgabe Sinn macht zu erlauben, und das einfach einfügen z.B. [rwxcdbl-]{10}. Wobei sowas wie c und l eigentlich nur ganz vorne kommen darf. Sowas wie d vorne dran würde ja auch Ordner als Dateien erlauben. Dazu aber am besten einfach Mal die ls Doku lesen und ein wenig rumprobieren.

Das [rw-]{10} erwartet genau zehn Zeichen, wovon jedes entweder ein r,w oder - Zeichen sein muss. Das erlaubt streng genommen natürlich auch sowas wie ---------- also ungültige Dateirechte. Aber darum sollte sich ja eigentlich ls bzw. das Dateisystem kümmern.

1
TechPech1984  02.07.2022, 19:30
@whgoffline

hast du eine idee wie man das ls -all bei meiner antwort hinter das grep bekommt bzw in das grep

1
whgoffline  02.07.2022, 20:10
@TechPech1984

Ich glaube rein bekommt man es nicht, aber dahinter sollte ca. so gehen

grep -oP 'asterix ...' < <(ls -all)
2