Olen yrittänyt luoda haun komentokomennon, joka löytää kaikki tiedostot, jotka päättyvät numeroon 1-99, mutta sulkevat pois kaikki muut .

esim Haluan löytää myfile1 myfile99 mutta en myfile456 eikä myfilebackup

Regex, jota ajattelen, on myfile[1-9]{1,2} mutta en voi saada tätä toimimaan etsinnän kanssa.

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

Mistä näen sen? {1,2} osa, joka ei toimi.

(muuten voitko käyttää -name -regex vaihtokelpoisesti?)

Apua arvostetaan.

Kommentit

  • -iname (ja -name) käytä maapalloa , jotka ei ole tätä syntaksia.

Vastaa

Voit kokeilla

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

tai

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

kommentit

  • kiitos – ensimmäinen rivi on worki ng minulle. Olin kokeillut tätä -inamin kanssa, mutta en ' usko, että se tukee syntaksia, tai muuten ' teen jotain väärin.

vastaus

Jos sinulla on GNU-haku, voit käyttää toista säännöllisen lausekkeen tyyppiä:

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

GNU: n mukaan find käyttää kastroitua Emacs säännöllisesti lausekkeen syntaksin oletuksena – Emacs tukee \{from,to\} -syntaksia, mutta vähintään GNU find ei tue sitä.

Oudolla tavalla viiteoppaassa ei ole osiota säännöllisen lausekkeen sed syntaksista, joten kuka tietää sen osat ovat tuettuja.

Kommentit

  • sed kuten ed näyttää olevan aliaksen kohteelle posix-basic, joten sen pitäisi olla yhteensopiva POSIX BRE: n kanssa (vaikka tukee joitakin ex kuten \+). Se ' ei ole yhteensopiva GNU: n kanssa sed jossa esimerkiksi [\n] vastaa uutta riviä eikä käänteinen viiva tai n, jota POSIX vaatii. Katso myös -regextype posix-extended POSIX ERE -soittimista (joten .*myfile[0-9]{1,2}), myös laajennuksilla, kuten \s tai \<
  • En koskaan tiennyt -regextype-tiedostosta. Vaikuttaa siltä, että jos käytät -regextype egrep, näyttää siltä, että voit välttää taaksepäin osoittamat viivat.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *