Jeg har prøvd å lage en finn-kommandostreng som finner alle filer som slutter med tallet 1-99, men ekskluderer alle andre .

f.eks Jeg vil finne myfile1 myfile99 men ikke myfile456 og ikke myfilebackup

Regex jeg tenker på er myfile[1-9]{1,2} men jeg kan ikke få dette til å fungere med finne.

find . -regex ".*myfile[0-9]{1,2}" ELLER find . -iname "myfile[0-9]{1,2}"

Fra det jeg ser, er det {1,2} -delen som ikke fungerer.

(forresten kan du bruke -name -regex om hverandre?)

Eventuell hjelp verdsatt.

Kommentarer

  • -iname (og -name) bruker globs , noe som gjør ikke har denne syntaksen.

Svar

Du kan prøve

find . -regex ".*myfile[0-9][0-9]?" 

eller

find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \) 

Kommentarer

  • Takk – første linje er worki ng for meg. Jeg hadde prøvd dette med -iname, men jeg tror ikke ' det støtter syntaksen, ellers gjør jeg ' noe galt.

Svar

Hvis du har GNU find, kan du bruke en annen type regulært uttrykk:

find . -regextype sed -regex ".*myfile[0-9]\{1,2\}" 

I følge GNU find bruker en kastrert Emacs syntaks for vanlig uttrykk som standard – Emacs støtter \{from,to\} syntaks, men i det minste GNU find støtter det ikke.

Merkelig nok inneholder referansehåndboken ikke et avsnitt om sed syntaks for vanlig uttrykk, så hvem vet hvilke deler av det støttes.

Kommentarer

  • sed som ed ser ut til å være et alias for posix-basic, så bør være kompatibelt med POSIX BRE (skjønt støtter noen eks spenninger som \+). Den ' er ikke kompatibel med GNU sed der for eksempel [\n] samsvarer med en ny linje i stedet for tilbakeslaget eller n som kreves av POSIX. Se også -regextype posix-extended for POSIX EREs (så .*myfile[0-9]{1,2}), også med utvidelser som \s eller \<
  • Jeg visste aldri om -rextxtype. Det ser ut til at hvis du bruker -regextype egrep, virker det som om du kan unngå tilbakeslag.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *