Megpróbáltam létrehozni egy keresési parancssort, amely megtalálja az összes 1-99 számmal végződő fájlt, de kizár minden más fájlt .

pl myfile1 myfile99 keresni akarok, de nem myfile456 és nem myfilebackup

A regex, amire gondolok myfile[1-9]{1,2} de ezt nem tudom elérni a kereséssel.

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

Amit látok, az a {1,2} rész, amely nem működik.

(mellesleg használhatja felcserélhetően a -name -regex szót?)

Bármely segítséget értékelünk.

Megjegyzések

  • -iname (és -name) használjon gömböket , amelyek nem rendelkezik ezzel a szintaxissal.

Válasz

Megpróbálhatja

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

vagy

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

Megjegyzések

  • Köszönöm – az első sor worki ng nekem. Ezt kipróbáltam a -iname-szal, de nem hiszem, hogy

szerintem támogatnám a szintaxist, különben én ' valamit rosszul csinálok.

Válasz

Ha rendelkezik GNU kereséssel, használhat másik reguláris kifejezés típust is:

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

A GNU szerint find egy ivartalanított Alapértelmezés szerint Emacs rendes kifejezés szintaxist – az Emacs támogatja a \{from,to\} szintaxist, de legalább a GNU find nem támogatja.

Furcsa módon a referencia kézikönyv nem tartalmaz részt a sed reguláris kifejezés szintaxisáról, tehát ki tudja, mely részei vannak támogatottak.

Megjegyzések

  • sed mint ed a posix-basic álnévnek tűnik, ezért kompatibilisnek kell lennie a POSIX BRE-vel (bár támogat néhány ex feszültségek, például \+). ' nem kompatibilis a GNU-val sed ahol például a [\n] új vonallal illeszkedik a a POSIX által megkövetelt visszavonás vagy n. Lásd még: -regextype posix-extended a POSIX ERE-kről (tehát .*myfile[0-9]{1,2}), olyan kiterjesztésekkel is, mint a \s vagy \<
  • Soha nem tudtam a -regextype-ről. Úgy tűnik, hogy a -regextype egrep használata esetén úgy tűnik, hogy elkerülheti a visszavágásokat.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük