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

  • -iname (en -name) gebruiken globs , die wel hebben deze syntaxis niet.

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 zoals ed lijkt een alias te zijn voor posix-basic, en zou dus compatibel moeten zijn met POSIX BRE (hoewel het enkele ex spanningen zoals \+). Het ' is niet compatibel met GNU sed waar bijvoorbeeld [\n] overeenkomt met een nieuwe regel in plaats van de backslash of n 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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *