Jag har försökt skapa en sökkommandosträng som hittar alla filer som slutar med siffran 1-99 men utesluter alla andra .
t.ex. Jag vill hitta myfile1 myfile99 men inte myfile456 och inte myfilebackup
Regex jag tänker på är myfile[1-9]{1,2}
men jag kan inte få detta att fungera med hitta.
find . -regex ".*myfile[0-9]{1,2}"
ELLER find . -iname "myfile[0-9]{1,2}"
Från vad jag kan se är det {1,2}
delen som inte fungerar.
(förresten kan du använda -name -regex
omväxlande?)
Någon hjälp uppskattad.
Kommentarer
Svar
Du kan prova
find . -regex ".*myfile[0-9][0-9]?"
eller
find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)
Kommentarer
- Tack – första raden är worki ng för mig. Jag hade provat detta med -iname men jag ' tror inte att det stöder syntaxen annars gör jag ' något fel.
Svar
Om du har GNU-sökning kan du använda en annan typ av reguljärt uttryck:
find . -regextype sed -regex ".*myfile[0-9]\{1,2\}"
Enligt GNU find
använder en neutraliserad Emacs syntax för reguljärt uttryck som standard – Emacs stöder \{from,to\}
syntax, men åtminstone GNU find
stöder det inte.
Konstigt nog innehåller referenshandboken inte ett avsnitt om sed
syntax för reguljära uttryck, så vem vet vilka delar av det stöds.
Kommentarer
-
sed
somed
verkar vara ett alias förposix-basic
, så bör vara kompatibelt med POSIX BRE (men stöder vissa ex spänningar som\+
). Den ' är inte kompatibel med GNUsed
där till exempel[\n]
matchar en ny rad istället för backslash ellern
som krävs av POSIX. Se även-regextype posix-extended
för POSIX ERE (så.*myfile[0-9]{1,2}
), även med tillägg som\s
eller\<
- Jag visste aldrig om -regextype. Det verkar som om du använder
-regextype egrep
det verkar som att du kan undvika bakåtvända snedstreck.
-iname
(och-name
) använder globs , vilket gör har inte denna syntax.