GNU/Linux >> Linux Esercitazione >  >> Linux

Bash + Verifica nome tramite espressione regolare?

Perché la seguente espressione regolare stampa valid , quando il nome è hdpworker01 ?

name=hdpworker01
[[ $name =~ worker[[:digit:]] ]] && echo valid

Quello che provo a fare è stampare valid solo se il nome corrisponde a worker[0-999] .

Esempio di risultati attesi:

  • Per name=worker01 :valid
  • Per name=hdpworker01 :nessun output

Risposta accettata:

Per impostazione predefinita, un'espressione regolare non è ancorata all'inizio o alla fine di una stringa. Questo è diverso da es. modelli di globbing del nome file. Ciò significa che l'espressione può corrispondere in qualsiasi punto della stringa data.

Per avere la tua espressione ancorata all'inizio della stringa, usa

^worker[[:digit:]]

Per ancorarlo ulteriormente alla fine della stringa e per consentire da una a tre cifre, usa

^worker[[:digit:]]{1,3}$

Se vuoi abbinare worker10 ma non worker01 o worker003 (nessun numero pieno di zero), usa

^worker([0-9]|[1-9][0-9]{1,2})$

Linux
  1. La definizione di un'espressione regolare?

  2. Errore script Bash:è prevista un'espressione intera?

  3. 6 Esempi di espressioni condizionali Bash ( -e, -eq, -z, !=, [, [[ ..)

  4. Come faccio a conoscere il nome del file di script in uno script Bash?

  5. controlla se l'argomento è una data valida nella shell bash

Espressione sequenza Bash (intervallo)

Come posso annullare l'impostazione o eliminare una funzione bash?

Come rimuovere i caratteri finali nei nomi di file in Bash?

Espressione regolare per trovare caratteri doppi in Bash

Problemi con le espressioni regolari in Bash:[^negate] non sembra funzionare

Espressione regolare con sed