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
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
somed
ser ut til å være et alias forposix-basic
, så bør være kompatibelt med POSIX BRE (skjønt støtter noen eks spenninger som\+
). Den ' er ikke kompatibel med GNUsed
der for eksempel[\n]
samsvarer med en ny linje i stedet for tilbakeslaget ellern
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.
-iname
(og-name
) bruker globs , noe som gjør ikke har denne syntaksen.