Ik heb geprobeerd een zoekopdrachtstring te maken die alle bestanden zoekt die eindigen op een nummer 1-99, maar alle andere uitsluit .
bijv Ik wil myfile1 myfile99 vinden maar niet myfile456 en niet myfilebackup
De regex waar ik aan denk is myfile[1-9]{1,2}
maar ik kan dit niet laten werken met find.
find . -regex ".*myfile[0-9]{1,2}"
OF find . -iname "myfile[0-9]{1,2}"
Van wat ik kan zien is het {1,2}
deel dat niet werkt.
(trouwens kun je -name -regex
door elkaar gebruiken?)
Alle hulp wordt op prijs gesteld.
Opmerkingen
Antwoord
Je zou kunnen proberen
find . -regex ".*myfile[0-9][0-9]?"
of
find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)
Reacties
- Bedankt – de eerste regel is worki ng voor mij. Ik had dit geprobeerd met -iname, maar ik denk niet ' niet dat het de syntaxis ondersteunt, anders doe ik ' iets verkeerd.
Answer
Als je GNU hebt gevonden, kun je een ander type reguliere expressie gebruiken:
find . -regextype sed -regex ".*myfile[0-9]\{1,2\}"
Volgens GNU gebruikt find
een gecastreerd Emacs reguliere expressiesyntaxis standaard – Emacs ondersteunt \{from,to\}
syntaxis, maar in ieder geval GNU find
ondersteunt het niet.
Vreemd genoeg bevat de referentiehandleiding geen sectie over de sed
reguliere expressiesyntaxis, dus wie weet welke delen ervan worden ondersteund.
Reacties
-
sed
zoalsed
lijkt een alias te zijn voorposix-basic
, en zou dus compatibel moeten zijn met POSIX BRE (hoewel het enkele ex spanningen zoals\+
). Het ' is niet compatibel met GNUsed
waar bijvoorbeeld[\n]
overeenkomt met een nieuwe regel in plaats van de backslash ofn
vereist door POSIX. Zie ook-regextype posix-extended
voor POSIX EREs (dus.*myfile[0-9]{1,2}
), ook met extensies zoals\s
of\<
- Ik wist nooit van -regextype af. Het lijkt erop dat als u
-regextype egrep
gebruikt, het lijkt alsof u de backslashes kunt vermijden.
-iname
(en-name
) gebruiken globs , die wel hebben deze syntaxis niet.