Proč se následující regulární výraz vypisuje valid
, když je název hdpworker01
?
name=hdpworker01
[[ $name =~ worker[[:digit:]] ]] && echo valid
Snažím se vytisknout valid
pouze pokud se jméno shoduje s worker[0-999]
.
Příklad očekávaných výsledků:
- Pro
name=worker01
:valid
- Pro
name=hdpworker01
:žádný výstup
Přijatá odpověď:
Regulární výraz není standardně ukotven na začátku ani na konci řetězce. Tím se liší např. název souboru globbing vzory. To znamená, že výraz se může shodovat kdekoli v daném řetězci.
Chcete-li, aby byl váš výraz ukotven na začátku řetězce, použijte
^worker[[:digit:]]
Chcete-li jej dodatečně ukotvit na konec řetězce a povolit jednu až tři číslice, použijte
^worker[[:digit:]]{1,3}$
Pokud chcete najít worker10
ale ne worker01
nebo worker003
(žádná nulová čísla), použijte
^worker([0-9]|[1-9][0-9]{1,2})$
Grep String Kde další řádek neobsahuje řetězec?
Jak spustit Keychain způsobem, který má pouze první výzvu Shell pro klíče při spuštění?