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

  • -iname (och -name) använder globs , vilket gör har inte denna syntax.

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 som ed verkar vara ett alias för posix-basic, så bör vara kompatibelt med POSIX BRE (men stöder vissa ex spänningar som \+). Den ' är inte kompatibel med GNU sed där till exempel [\n] matchar en ny rad istället för backslash eller n 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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *