GNU/Linux >> Znalost Linux >  >> Linux

Bash + Ověřit název regulárním výrazem?

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})$

Linux
  1. Bash:Regulární výrazy v substituci?

  2. 6 Bashových příkladů podmíněných výrazů ( -e, -eq, -z, !=, [, [[ ..)

  3. Jak poznám název souboru skriptu ve skriptu Bash?

  1. Název souboru se netiskne správně s podtržítkem _ v Bash

  2. Identifikace názvu přijatého signálu v Bash

  3. Proč `\d` nefunguje v regulárních výrazech v sed?

  1. Jak odstranit koncové znaky v názvech souborů v Bash?

  2. Problém(y) s regulárním výrazem v Bash:[^negate] zřejmě nefunguje

  3. číselný rozsah extraktu grep