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
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
kutened
näyttää olevan aliaksen kohteelleposix-basic
, joten sen pitäisi olla yhteensopiva POSIX BRE: n kanssa (vaikka tukee joitakin ex kuten\+
). Se ' ei ole yhteensopiva GNU: n kanssased
jossa esimerkiksi[\n]
vastaa uutta riviä eikä käänteinen viiva tain
, 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.
-iname
(ja-name
) käytä maapalloa , jotka ei ole tätä syntaksia.