OS X Finden Sie in bash mit Regex-Ziffern, die nicht zu den erwarteten Ergebnissen führen

8

Ich verwende den folgenden regex find-Befehl im OS X-Terminal, um eine ganze Ladung von Dateien zu finden, die 8-stellige Dateinamen gefolgt von einer .jpg-, .gif-, .png- oder .eps-Erweiterung haben. Das Folgende bringt keine Ergebnisse, obwohl ich OS X / BSD gesagt habe, dass es moderne Regex verwenden soll %Vor%

Ссылка (http://rubular.com/r/YMz3J8Qlgh) zeigt, dass das Regex-Muster die erwarteten Ergebnisse liefert und OS X erzeugt die Ergebnisse beim Tippen

%Vor%

Aber das scheint etwas langatmig zu sein.

    
juliushibert 23.03.2012, 17:31
quelle

5 Antworten

10

Diese Befehle funktionieren unter OSX

%Vor%

Dieser Befehl entspricht 12345678.jpg, nicht 123456789.jpg

%Vor%

Dieser Befehl entspricht 12345678.jpg und 123456789.jpg

%Vor%

entspricht dem Ordnerpfad oder dem Unterordnerpfad

    
jackjr300 21.04.2012, 07:01
quelle
2

Mit all deinen Antworten konnte ich endlich OSX find (10.8.1) mit Regex verwenden. Zum Zurückgeben, hier sind meine Ergebnisse: Wir verwenden benutzerdefinierte Zeichenfolgen, um Clips zu identifizieren. Das Muster sieht folgendermaßen aus: "YYMMDDabc ## abc * .ext": Jahr / Monat / Tag / 3Zeichen / 2Zeichen / 3Zeichen / was auch immer / ext

%Vor%

Das initiale ^ stellt sicher, dass das Muster am Anfang der Suche steht, [0-9] {6} sucht nach einer 6-stelligen Zeichenfolge, \ d funktioniert nicht. \ D funktioniert nicht für Buchstaben, A-Za-z tut es. Das $ stellt am Ende sicher, dass die letzte Suche das Ende der Zeichenkette ist.

Nach dem Lesen der Apple-Hilfeseite zu finden Sie und re_format Ich war völlig verrückt nach entkommenen Charakteren.

    
ugn 12.09.2012 10:25
quelle
1

man re_format erklärt die Besonderheiten der modernen Regex, die find akzeptiert.

Das funktioniert bei mir: -iregex '[0-9]{8}'

    
jdi 23.03.2012 18:09
quelle
0

Dies war ein sehr augenöffnender Thread. Ich bringe eine Lösung für mein eigenes Problem an den Tisch und hoffe, dass ich Ihnen und anderen Benutzern, die nach Robustheit suchen (wie ich), ein oder zwei Dinge erklären möchte.

In meinem Fall hatte mein Mac eine Reihe von doppelten Fotos. Wenn Macs Duplikate erstellen, fügen sie am Ende vor der Erweiterung ein Leerzeichen und eine Zahl an.

IMG_0001.JPG könnte eine Multiplizität mit IMG_0001 2.JPG , IMG_0001 3.JPG usw. haben. In meinem Fall ging das weiter und machte ungefähr 2.600 nutzlose Dateien aus.

Um die Dinge aufzufrischen, navigierte ich zu dem fraglichen Ordner.

%Vor%

Als nächstes beweisen wir uns, dass wir alle Dateien im Verzeichnis auflisten können. Sie werden feststellen, dass es in der Regex notwendig ist, die . einzufügen, die besagt "schau in dieses Verzeichnis". Außerdem müssen Sie den gesamten Dateinamen anpassen, damit% code_% erforderlich ist, um alle anderen Zeichen abzufangen.

%Vor%

Entsprechend ergeben die Ergebnisse die Zeichenfolgen, denen Sie entsprechen müssen, einschließlich der oben erwähnten .+ i, des Schrägstrichs . und alles andere.

%Vor%

Also kann ich nicht schreiben, um Duplikate zu finden, weil es nicht "./"

enthält %Vor%

aber ich kann dies schreiben, um Duplikate zu finden, weil es das "./"

enthält %Vor%

oder die etwas ausgefallenere Version mit / , wie von @ jackjr300 erwähnt, macht dasselbe.

%Vor%

Schließlich ist der verwirrende Teil. .*/ wird in BSD nicht erkannt. \d funktioniert genauso gut. Die Antworten anderer Benutzer zitieren die re_format Handbuch, das auflistet, wie man gängige Muster schreibt, die Dinge wie [0-9] durch eine lustige quadratische Doppelpunktsyntax ersetzen, die wie folgt aussieht: \d . Ich habe es versucht und versucht, aber es funktioniert nie. Verwenden Sie einfach [:digit:] . In meinem Fall verschwendete ich eine Menge Zeit mit dem Gedanken, dass ich [0-9] anstelle eines Platzes hätte verwenden sollen, aber ich fand (wie üblich!), Dass ich nur Luft holen musste und wirklich die Regex lesen musste. Es stellte sich heraus, dass es mein Fehler war. :)

Hoffe das hilft jemandem!

    
Wray Bowling 06.03.2013 00:59
quelle
0

Ich verwende diese Regex, um iPhone-Minipakete zu finden und zu löschen:

finde -E. -regex '. * / IMG_ [0-9] {4} [] 1.JPG' -print -exec rm '{}' \;

    
Mircea Stanciu 04.08.2014 23:59
quelle

Tags und Links