Próbowałem utworzyć ciąg polecenia find, który znajdzie wszystkie pliki, które kończą się cyframi 1-99, ale wykluczają wszystkie inne.
np. chcę znaleźć mój_plik1 mój_plik99, ale nie mój_plik456 i nie myfilebackup
Wyrażenie, o którym myślę, jest takie, myfile[1-9]{1,2}
ale nie mogę zmusić go do pracy z funkcją find.
find . -regex '.*myfile[0-9]{1,2}'
LUB
find . -iname 'myfile[0-9]{1,2}'
Z tego, co widzę, jest to {1,2}
część, która nie działa.
(a propos, czy można używać -name -regex
zamiennie?)
Każda pomoc doceniona.
bash
find
regular-expression
Lukas88
źródło
źródło
-iname
(i-name
) używaj globów , które nie mają tej składni.Odpowiedzi:
Możesz spróbować
lub
źródło
Jeśli masz GNU find, możesz użyć innego typu wyrażenia regularnego:
Zgodnie z GNU domyślnie
find
korzysta z neutralnej składni wyrażeń regularnych Emacsa - Emacs obsługuje\{from,to\}
składnię, ale przynajmniej GNU jejfind
nie obsługuje.O dziwo, podręcznik referencyjny nie zawiera części dotyczącej
sed
składni wyrażeń regularnych, więc kto wie, które części są obsługiwane.źródło
sed
jaked
wydaje się być aliasemposix-basic
, więc powinny być zgodne z POSIX BRE (choć podpór Niektóre rozszerzenia takie jak\+
). Nie jest kompatybilny z GNU,sed
gdzie na przykład[\n]
pasuje do nowej linii zamiast odwrotnego ukośnika lub jestn
wymagany przez POSIX. Zobacz także-regextype posix-extended
POSIX ERE (tak.*myfile[0-9]{1,2}
), także z rozszerzeniami, takimi jak\s
lub\<
-regextype egrep
go użyjesz , wydaje się, że możesz uniknąć odwrotnego ukośnika.