Portál AbcLinuxu, 30. dubna 2025 21:23
Protože rychle zapomínám, tak do tohohle zápisu vložím poznámky ohledně pseudoznaků v Bashy (nebo Bashi?). Půjde o víc než jenom překlad části manuálové stránky k Bashy. V manuálové stránce k Bashy najdete informace o pseudoznacích v části nazvané Pattern Matching.
*
Zastupuje jakýkoli (i nulový) řetězec.?
Zastupuje jeden libovolný znak.[abcde]
Odpovídá přesně jeden znak z "abcde".[1-3]
nebo [a-e]
Odpovídá přesně jeden znak z daného rozsahu. Vše závisí na nastavení locale
a proměnné LC_COLLATE
.[:class:]
, "class" může nabývat hodnoty:
alnum
Zastupuje jakýkoli alfanumerický znak (znaky abecedy a číslice).
alpha
znak abecedy
ascii
ASCII znak
blank
přinejmenším obsahuje znak mezery a a řídící znak '\t' (horizontal tab)
cntrl
netisknutelné (řídící) znaky, "cntrl" a "print" jsou disjunktní množinydigit
číslice 0 až 9graph
stejné jako u "print", nepatří sem ale znak mezerylower
obsahuje přinejmenším (závisí to na locale) 'a' až 'z'print
pouze tisknutelné znakypunct
nealfanumerické znakyspace
přinejmenším znak mezery a '\, '\n' (new line), '\r' (carriage return), '\t' (horizonatal tab), '\v' (vertical tab)
upper
přinejmenším 'A' až 'Z'word
písmena, číslice a podtržítko (_)xdigit
přinejmenším písmena 'A' až 'F', 'a' až 'f' a čísla '0' až '9'
Poznámky: [!neco]
nebo [^neco]
jsou negací [neco]
. [-acf] nebo [acf-] -- chceme-li "matchnout" znak '-'. []123A]
-- chceme-li "matchnout" znak ']'.
Pokud použijeme příkaz shopt -s extglob
(tím povolíme extended pattern matching), dostaneme mocnější nástroje:
?(pattern1|pattern2|pattern3|pattern4...)
nula nebo jeden výskyt pattern1 nebo pattern2 nebo pattern3 nebo pattern4 (...)*(pattern1|pattern2|pattern3|pattern4...)
nula nebo víc výskytů daných řetězců
+(pattern1|pattern2|pattern3|pattern4...)
jeden nebo víc výskytů daných řetězců
@(pattern1|pattern2|pattern3|pattern4...)
Odpovídá buď řetězci pattern1, nebo pattern2, nebo pattern3, nebo patter4 (...).!(pattern1|pattern2|pattern3|pattern4...)
Odpovídá čemukoli vyjma zadaných řetězců (negace).Poznámka: Znaky '\', ''' a '"' budou odstraněny. Záchovány budou jenom tehdy, jestliže jsou výstupem expanze nebo jsou "oúvozovkovány".
Tiskni
Sdílej:
Jojo díky za připomínky.
Nejedná se o regulérní výrazy, ale o takzvané "žolíkové karty". Žolíkové znaky se týkají názvů souborů […]. Naproti tomu regulární výrazy se zaobírají obsahem (textových) souborůTo není tak úplně pravda. Regulární výrazy jsou (dovolím si zkratku) lidsky čitelným zápisem matematického modelu algoritmu pro rozpoznávání určité třídy jazyků. V teorii se obvykle omezujeme na regulární výrazy postihující regulární jazyky, dnešní perlovské i posixové regulární výrazy rozpoznávají jazyky bezkontextové, ale na tom teď nesejde. Zástupné (mně se to slovo žolíkové docela líbí, ale prostě mi nejde přes prsty) znaky jsou jejich podmnožinou a jejich rozpoznávací schopnost je menší (pamatuju si z MS-DOSu jenom otazník a hvězdičku, s tím toho člověk opravdu moc neudělal
for i in file-{1,4,9,12,15} ; do echo $i;done
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.