Mengapa ekspresi reguler berikut mencetak valid
, ketika namanya hdpworker01
?
name=hdpworker01
[[ $name =~ worker[[:digit:]] ]] && echo valid
Yang saya coba lakukan adalah mencetak valid
hanya jika namanya cocok dengan worker[0-999]
.
Contoh hasil yang diharapkan:
- Untuk
name=worker01
:valid
- Untuk
name=hdpworker01
:tidak ada keluaran
Jawaban yang Diterima:
Ekspresi reguler tidak ditambatkan ke awal atau akhir string secara default. Ini berbeda dari mis. pola globbing nama file. Ini berarti bahwa ekspresi dapat cocok di mana saja dalam string yang diberikan.
Agar ekspresi Anda ditambatkan ke awal string, gunakan
^worker[[:digit:]]
Untuk menambahkannya ke ujung string dan memungkinkan satu hingga tiga digit, gunakan
^worker[[:digit:]]{1,3}$
Jika Anda ingin mencocokkan worker10
tapi bukan worker01
atau worker003
(tidak ada angka yang diisi nol), gunakan
^worker([0-9]|[1-9][0-9]{1,2})$
Grep String Dimana Baris Berikutnya Tidak Mengandung String?
Bagaimana Menjalankan Keychain Dengan Cara Yang Hanya Memiliki Shell Prompt Pertama Untuk Kunci Saat Startup?