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

  • -iname (i -name) użyj globów , które nie ma takiej składni.

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 jak ed wydaje się być aliasem dla posix-basic, więc powinien być kompatybilny z POSIX BRE (chociaż obsługuje niektóre ex napięcia, takie jak \+). To ' nie jest zgodne z GNU sed, gdzie na przykład [\n] dopasowuje nową linię zamiast ukośnik odwrotny lub n 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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *