Forum Doku Wiki Blog

Forumsarchiv 2007, Mai
Regex auf Ausgabe von ls -l

archivierte Beiträge lesen

  1. (SONSTIGES) Regex auf Ausgabe von ls -l von Mustard, 07. 05. 2007, 17:23

Regex auf Ausgabe von ls -l

Der folgende Beitrag wurde am 07. 05. 2007, 17:23 Uhr von Mustard veröffentlicht.

Hallo.

Ich habe hier eine überarbeitete Ausgabe von ls -l eines Ordners, in dem nur Bilder liegen.
"Überarbeitet" heißt, ich hab die Dateirechte, die Besitzer und Gruppe schon rausgenommen. Jeder Eintrag sieht momentan so aus:

115011    2007-04-19 18:01 andreas~0.JPG

Da möchte ich nun alles vor dem Dateinamen löschen. Dazu benutze ich einen Editor, der Regex unterstützt (in meinem Fall Bluefish).

Mein Vorgehen habe ich mir so gedacht: Ich ersetze alle Suchergebnisse meines Regex' mit "", also mit nichts.
Ich habe folgenden Regex probiert, der aber nicht passt:

/*2007-[01-12]-[01-31] [00-23]:[00-59] /

Ich weiß nicht mal, ob ich den Limiter / rechts und links brauche. Ohne ihn kommt ab und zu die Fehlermeldung "Nothing to repeat bei Offset 0". Wobei ich doch gar nichts wiederholen lasse...
Rein nach Augenmaß müsste der Regex doch eigentlich greifen. Warum nicht und wie lautet dann der korrigierte Regex?

Danke
Mustard

Regex auf Ausgabe von ls -l

Der folgende Beitrag wurde am 07. 05. 2007, 17:28 Uhr von steckl veröffentlicht.

Hi,

> Ich habe hier eine überarbeitete Ausgabe von ls -l eines Ordners, in dem nur Bilder liegen.

> Da möchte ich nun alles vor dem Dateinamen löschen.

Gibt es einen Grund, warum du nicht "ls" ohne das "-l" benutzt?

mfG,
steckl

Regex auf Ausgabe von ls -l

Der folgende Beitrag wurde am 07. 05. 2007, 17:45 Uhr von Mustard veröffentlicht.

Hallo

> Gibt es einen Grund, warum du nicht "ls" ohne das "-l" benutzt?

Das Problem ist, dass ich keinen Einfluss darauf hatte, ob und welcher Parameter benutzt wurde. Ich habe nur die Ausgabe von ls -l bekommen. Und damit muss ich nun zurecht kommen.

Es handelt sich um 255 Zeilen, sprich auch 255 Bilder. Alles einzeln manuell zu löschen wäre ein Aufwand von einem Wochenende. Mit Regex aber nur von wenigen Sekunden.

MfG
Mustard

Regex auf Ausgabe von ls -l

Der folgende Beitrag wurde am 07. 05. 2007, 17:54 Uhr von Gunnar Bittersmann veröffentlicht.

Hello out there!

> Ich habe folgenden Regex probiert, der aber nicht passt:
>
> /*2007-[01-12]-[01-31] [00-23]:[00-59] /

Was soll der '*'? Der ist nicht der Joker bei regulären Ausdrücken, sondern '.'.

Du kannst nur Zeichenbereiche angeben; keine Zahlenbereiche. Also '2007-' gefolgt von zwei Ziffern gefolgt von '-' gefolgt von zwei Ziffern ...

  .*2007-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}

(Für '[0-9]' kannst du auch '\d' schreiben, wenn dein Editor diese Syntax versteht.)

Eine genauere Prüfung, welche Ziffern dort stehen, ist gar nicht notwendig, du willst ja das Datum nicht auf Gültigkeit prüfen. (Ginge auch, wäre aber unsinnig. [http://forum.de.selfhtml.org/archiv/2006/3/t126272/#m814810 ff.])

Aber wozu hier ein regulärer Ausdruck? Die Anzahl der zu löschenden Zeichen sollte doch konstant und bekannt sein.

Und natürlich, was [steckl] sagte.

See ya up the road,
Gunnar
--
„Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)

Regex auf Ausgabe von ls -l

Der folgende Beitrag wurde am 07. 05. 2007, 18:06 Uhr von Mustard veröffentlicht.

Vielen Dank, jetzt hab ichs. Dieser Regex war richtig (naja, ein bisschen modifizieren musste ich ihn schon:

[0-9]{5,6}    2007-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}

)

Danke
Mustard

Regex auf Ausgabe von ls -l

Der folgende Beitrag wurde am 07. 05. 2007, 21:40 Uhr von seth veröffentlicht.

gudn tach!

> [0-9]{5,6}    2007-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}

statt [0-9] kann man oft auch \d verwenden (ist geschmackssache, aber auf jeden fall kuerzer).
da die anzahl der leerzeichen und die groesse variieren kann, wuerde ich jene flexibler halten:

  \d+ +200\d-\d{2}-\d{2} \d{2}:\d{2}

und statt eines gewoehnlichen editors kannst du auch gleich im cli sed oder perl verwenden, also z.b.

  perl -p -e "s/^\d+ +200\d-\d{2}-\d{2} \d{2}:\d{2} //" dateiname

oder noch kuerzer:

  perl -p -e "s/^\d+ +200\d-\d\d-\d\d \d\d:\d\d //" dateiname

 in sed waere es dann wieder mit [0-9] statt \d und die braces muessten mit back-slash maskiert werden

  sed -e "s/^[0-9]+ +200[0-9]-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\} //" dateiname

oder

  sed -e "s/^[0-9]+ +200[0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9] //" dateiname

auf diese weise wird der ersetzte kram an STDOUT uebergeben. also kann er in eine datei gepipet werden, z.b.

  perl -p -e "s/^\d+ +200\d-\d\d-\d\d \d\d:\d\d //" dateiname > ersetzt.txt

und mittels des parameters -i (in perl und in sed) kann man eine in-place-ersetzung durchfuehren, d.h. es wird der kram innerhalb der datei ersetzt.

der vollstaendigkeit halber sei noch erwaehnt, dass "ls -1" (in worten: "eins" nicht die kleine version des buchstabens "L") gleich die gewuenschte ausgabe gebracht haette.

prost
seth

Regex auf Ausgabe von ls -l

Der folgende Beitrag wurde am 07. 05. 2007, 21:50 Uhr von seth veröffentlicht.

gudn tach!

sorry, hab was vergessen:

> in sed waere es dann wieder mit [0-9] statt \d und die braces muessten mit back-slash maskiert werden
>
>   sed -e "s/^[0-9]+ +200[0-9]-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\} //" dateiname

und ausserdem muessen noch die plus-zeichen maskiert werden.

  sed -e "s/^[0-9]\+ \+200[0-9]-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\} //" dateiname

prost
seth

Regex auf Ausgabe von ls -l

Der folgende Beitrag wurde am 07. 05. 2007, 17:56 Uhr von Gunnar Bittersmann veröffentlicht.

Hello out there!

> Dazu benutze ich einen Editor, der Regex unterstützt (in meinem Fall Bluefish).

Benutzt dieser Editor auch blockweises Markieren? (Textpad tut das.)

See ya up the road,
Gunnar
--
„Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)

Regex auf Ausgabe von ls -l

Der folgende Beitrag wurde am 07. 05. 2007, 21:48 Uhr von seth veröffentlicht.

gudn tach!

> > Dazu benutze ich einen Editor, der Regex unterstützt (in meinem Fall Bluefish).
>
> Benutzt dieser Editor auch blockweises Markieren? (Textpad tut das.)

vim kann beides.

also entweder
  vim file<enter>
  <ctrl-v>G3Whd:w<enter>
oder
  vim file<enter>
  :%s/^\d\+ \+200\d-\d\d-\d\d \d\d:\d\d //<enter>
  :w<enter>

prost
seth

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4