Próbowałem utworzyć polecenie wyszukiwania, które pozwoli znaleźć wszystkie pliki kończące się liczbą 1-99, ale wykluczające wszystkie inne .
np Chcę znaleźć myfile1 myfile99 , ale nie myfile456 a nie myfilebackup
Wyrażenie regularne, o którym myślę, to myfile[1-9]{1,2}
, ale nie mogę tego uruchomić z funkcją find.
find . -regex ".*myfile[0-9]{1,2}"
LUB find . -iname "myfile[0-9]{1,2}"
Z tego, co widzę, to „{1,2}
część, która nie działa.
(przy okazji czy możesz używać -name -regex
zamiennie?)
Każda pomoc jest mile widziana.
Komentarze
Odpowiedź
Możesz spróbować
find . -regex ".*myfile[0-9][0-9]?"
lub
find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)
Komentarze
- Dziękujemy – pierwsza linia to Praca ja ng dla mnie. Próbowałem tego z -iname, ale nie ' nie sądzę, że obsługuje składnię, bo inaczej ' robię coś źle.
Odpowiedź
Jeśli masz GNU find, możesz użyć innego typu wyrażenia regularnego:
find . -regextype sed -regex ".*myfile[0-9]\{1,2\}"
Według GNU find
używa wykastrowanych Składnia wyrażeń regularnych Emacsa – Emacs obsługuje składnię \{from,to\}
, ale przynajmniej GNU find
nie obsługuje tego.
O dziwo, podręcznik nie zawiera sekcji na temat składni wyrażeń regularnych sed
, więc kto wie, które jej części są obsługiwane.
Komentarze
-
sed
jaked
wydaje się być aliasem dlaposix-basic
, więc powinien być kompatybilny z POSIX BRE (chociaż obsługuje niektóre ex napięcia, takie jak\+
). To ' nie jest zgodne z GNUsed
, gdzie na przykład[\n]
dopasowuje nową linię zamiast ukośnik odwrotny lubn
wymagane przez POSIX. Zobacz także-regextype posix-extended
dla POSIX ERE (czyli.*myfile[0-9]{1,2}
), także z rozszerzeniami takimi jak\s
lub\<
- Nigdy nie wiedziałem o -regextype. Wygląda na to, że jeśli używasz
-regextype egrep
, wydaje się, że możesz uniknąć odwrotnych ukośników.
-iname
(i-name
) użyj globów , które nie ma takiej składni.