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
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
minted
aposix-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-valsed
ahol például a[\n]
új vonallal illeszkedik a a POSIX által megkövetelt visszavonás vagyn
. 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.
-iname
(és-name
) használjon gömböket , amelyek nem rendelkezik ezzel a szintaxissal.