String dengan Escapes Spaces
Sebuah string dapat dibangun dengan mengganti setiap spasi dengan urutan escape spasi, ' '; seperti dalam:
myVar=Pariwisatadi dalam Mesir adalah salah satu dari negaranya 's terkemuka ekonomi industri.
dibuang $myVar
Outputnya adalah:
Pariwisata di Mesir adalah salah satu industri ekonomi terkemuka di negara itu.
Catatan: apostrof juga menggunakan urutan keluar ruang.
String oleh Kutipan Tunggal
Apakah programmer punya waktu untuk keluar dari semua spasi dalam sebuah string? Tidak. Oleh karena itu, lebih baik menggunakan dua tanda kutip tunggal untuk membatasi string; seperti:
myVar='Pariwisata di Mesir adalah salah satu negara' ''industri ekonomi terkemuka.'String yang dikutip tunggal tidak memungkinkan ekspansi (menggantikan dengan efeknya) dari urutan escape apa pun. Untungnya, jika dua string dikodekan di samping satu sama lain, mereka akan dianggap sebagai satu string. Urutan pelarian dapat dimasukkan di antara, seperti yang dilakukan di atas. Urutan pelarian akan diperluas. Sehingga outputnya menjadi:
Pariwisata di Mesir adalah salah satu industri ekonomi terkemuka di negara itu.
String dengan Kutipan Ganda
Dengan tanda kutip ganda, urutan escape tidak diperluas juga, tetapi variabel diperluas. Kode berikut menggambarkan hal ini:
myVar=Pariwisatadi dalam Mesir adalah salah satu dari negaranya 's terkemuka ekonomi industri.dibuang $myVar
Outputnya adalah:
Pariwisata di Mesir adalah salah satu industri ekonomi terkemuka di negara itu.
Catatan: apostrof juga menggunakan urutan keluar ruang.
Dalam artikel ini, jenis utama string yang dipertimbangkan adalah string dalam tanda kutip tunggal.
Dasar-dasar Ekspresi Reguler
ekspresi reguler
Pertimbangkan string ini:
Dunia ini sebenarnya bukan rumah kita.
Biarkan dunia menjadi substring yang menarik. Kemudian, string besar (seluruh string) disebut string target atau secara sederhana, target. 'Dunia' dalam tanda kutip disebut ekspresi reguler atau sederhananya, regex. Konten, dunia, adalah polanya, dalam hal ini.
Pencocokan Sederhana
Dalam kode berikut, jika kata 'dunia' ditemukan di target, kami akan mengatakan kata telah dicocokkan.
P='Dunia ini bukan benar-benar rumah kita.'reg='dunia'
jika [[ $ str= ~$reg ]];kemudian
dibuangditemukan
lain
dibuangtidak ditemukan
menjadi
=~ , yang merupakan operator penugasan diikuti oleh ~ , disebut operator pengikatan. Kondisi memeriksa apakah pola cocok dengan string target. Jika substring yang sesuai dengan pola ditemukan di target, pernyataan gema akan ditampilkan. Jika tidak ditemukan, pernyataan gema gema tidak ditemukan. Output untuk kode ini adalah:
ditemukan
Sebagai pola, dunia, ditemukan dalam target. Perhatikan bahwa spasi pembatas setelah [[ dan sebelum ]] telah dipertahankan.
Pola
Dalam kode di atas, 'dunia' dalam tanda kutip adalah regex sedangkan dunia itu sendiri adalah polanya. Ini adalah pola langsung. Namun, kebanyakan pola tidak sesederhana itu. Pola adalah karakterisasi dari substring yang akan ditemukan. Jadi, pola Bash menggunakan metakarakter tertentu. Metacharacter adalah karakter tentang karakter lain. Sebagai contoh, Bash Pattern menggunakan metakarakter berikut:
^ $ . * +? () [] {} |
Ekspresi reguler juga dapat diketik dalam kondisi tanda kurung ganda. Tapi itu tidak harus dalam tanda kutip. Jadi, dalam hal ini, secara harfiah, sebuah pola.
Kelas Karakter
Kurung Persegi
Output dari kode berikut ditemukan, artinya terjadi kecocokan:
P='Kucing itu masuk ke kamar.'jika [[ $ str= ~[cbr]pada]];kemudian
dibuangditemukan
menjadi
Pola, [cbr]at memiliki kecocokan cat, yang dimulai dengan 'c', dan berlanjut dan diakhiri dengan at. [cbr]at berarti, cocok dengan 'c' atau 'b' atau 'r' diikuti dengan at.
Output dari kode berikut ditemukan, artinya terjadi kecocokan:
P='Kelelawar masuk ke kamar.'jika [[ $ str= ~[cbr]pada]];kemudian
dibuangditemukan
menjadi
Pola, [cbr]at memiliki bat yang cocok, yang dimulai dengan 'b', dan yang berlanjut dan diakhiri dengan at. [cbr]at berarti, cocok dengan 'c' atau 'b' atau 'r' diikuti dengan at.
Output dari kode berikut ditemukan, artinya terjadi kecocokan:
P='Tikus itu masuk ke kamar.'jika [[ $ str= ~[cbr]pada]];kemudian
dibuangditemukan
menjadi
Pola, [cbr]at memiliki kecocokan tikus, yang dimulai dengan 'r', dan yang berlanjut dan diakhiri dengan di.
Dalam contoh kode di atas, pemrogram tidak tahu apakah kucing atau kelelawar atau tikus ada di string target. Tapi, dia tahu bahwa substring dimulai dengan 'c' atau 'b' atau 'r', kemudian berlanjut dan diakhiri dengan di. Tanda kurung siku dalam suatu pola memungkinkan kemungkinan karakter yang berbeda untuk mencocokkan satu karakter pada posisi relatif terhadap karakter lain dalam target. Jadi, tanda kurung siku berisi sekumpulan karakter, yang salah satunya cocok untuk substring. Akhirnya, substring lengkap yang cocok.
Rentang Karakter
Dalam kode di atas [cbr] adalah sebuah kelas. Bahkan jika 'c' atau 'b' atau 'r' sesuai dengan satu karakter, jika pada saat itu segera tidak cocok, polanya tidak akan cocok dengan apa pun.
Nah, ada rentang tertentu yang akan membentuk kelas. Misalnya, 0 hingga 9 digit membentuk kelas, [0-9] dengan 0 dan 9 disertakan. Huruf kecil 'a' hingga 'z' membentuk kelas [a-z] dengan menyertakan 'a' dan 'z'. Huruf besar 'A' hingga 'Z' membentuk kelas [A-Z] dengan 'A' dan 'Z' disertakan. Dari sebuah kelas, itu adalah salah satu karakter yang akan cocok dengan satu karakter dalam string.
Kode berikut menghasilkan kecocokan:
jika [[ 'ID8id'= ~[0-9] ]];kemudiandibuangditemukan
menjadi
Kali ini targetnya adalah string literal dalam kondisi. 8, yang merupakan salah satu angka yang mungkin dalam rentang, [0-9], telah cocok dengan 8 dalam string, 'ID8id'. Kode di atas setara dengan:
jika [[ 'ID8id'= ~[0123456789] ]];kemudiandibuangditemukan
menjadi
Di sini, semua angka yang mungkin telah ditulis dalam pola, jadi tidak ada tanda hubung.
Dalam kode berikut, kecocokan diperoleh:
jika [[ 'ID8iD'= ~[a-z] ]];kemudiandibuangditemukan
menjadi
Kecocokan adalah antara huruf kecil 'i' dari rentang, [a-z], dan huruf kecil 'i' dari string target, 'ID8iD'.
Ingat: rentang adalah kelas. Kelas dapat menjadi bagian dari pola yang lebih besar. Jadi dalam sebuah pola, teks bisa berada di depan dan/atau setelah kelas. Kode berikut menggambarkan hal ini:
jika [[ 'ID8id adalah pengidentifikasi'=~ ID[0-9]Indo ]];kemudiandibuangditemukan
menjadi
Outputnya adalah: ditemukan. 'ID8id' dari pola telah cocok dengan 'ID8id' di string target.
Penyangkalan
Pencocokan tidak diperoleh dari kode berikut:
jika [[ '0123456789101122'= ~[^0-9] ]];kemudiandibuangditemukan
lain
dibuangtidak ditemukan
menjadi
Outputnya adalah:
tidak ditemukan
Tanpa ^ di depan rentang, di dalam tanda kurung siku, nol rentang akan cocok dengan nol pertama dari string target. Jadi, ^ di depan rentang (atau karakter opsional) meniadakan kelas.
Kode berikut menghasilkan kecocokan karena kondisinya berbunyi: cocokkan dengan karakter non-digit mana pun di target:
jika [[ 'ABCDEFGHIJ'= ~[^0-9] ]];kemudiandibuangditemukan
lain
dibuangtidak ditemukan
menjadi
Jadi hasilnya adalah: ditemukan .
[^0-9] berarti bukan angka, jadi [^0-9] adalah negasi dari [0-9] .
[^a-z] berarti bukan huruf kecil, jadi [^a-z] adalah negasi dari [a-z] .
[^A-Z] berarti bukan huruf besar, jadi [^A-Z] adalah negasi dari [A-Z] .
Negasi lain tersedia.
Periode (.) dalam Pola
Titik (.) dalam pola cocok dengan karakter apa pun termasuk karakter itu sendiri. Perhatikan kode berikut:
jika [[ '6759WXY.A3'= ~ 7.9W.Y.A]];kemudiandibuangditemukan
menjadi
Keluaran kode ditemukan karena karakter lain cocok. Satu titik cocok dengan '5'; titik lain cocok dengan 'X'; dan titik terakhir cocok dengan titik.
Pencocokan Alternatif
Pertimbangkan kalimat ini untuk string target:
Sangkar memiliki burung dari berbagai jenis.
Seseorang mungkin ingin tahu apakah target ini memiliki merpati atau merak atau elang. Kode berikut dapat digunakan:
P='Sangkar memiliki burung merak dari berbagai jenis.'jika [[ $ str=~ merpati|merak|burung rajawali]];kemudian
dibuangditemukan
lain
dibuangtidak ditemukan
menjadi
Outputnya adalah, ditemukan. Metakarakter bergantian, | telah dipekerjakan. Bisa ada dua, tiga, empat dan lebih banyak alternatif. Yang cocok dengan kode ini adalah 'merak'.
Pengelompokan
Dalam pola berikut, tanda kurung telah digunakan untuk mengelompokkan karakter:
panggung (penari)
Kelompok di sini adalah penari panggung yang dikelilingi oleh metakarakter (dan). (penari) adalah subkelompok, sedangkan panggung (penari) adalah seluruh kelompok. Pertimbangkan hal berikut:
(penarinya luar biasa)
Di sini, subgrup atau substring adalah, penarinya luar biasa.
Substring dengan Bagian Umum
Stakeholder adalah orang yang berkepentingan dengan bisnis. Bayangkan sebuah bisnis dengan situs web, stake.com. Bayangkan salah satu dari string target berikut ada di komputer:
Situs web, stake.com adalah untuk bisnis.;
Ada pemangku kepentingan.;
Pemangku kepentingan bekerja untuk stake.com.;
Biarkan salah satu dari string ini menjadi target. Pemrogram mungkin ingin tahu apakah stake.com atau pemangku kepentingan ada dalam string target apa pun. Polanya akan menjadi:
stake.com|stakeholder
menggunakan pergantian.
pasak telah diketik dua kali dalam dua kata. Hal ini dapat dihindari dengan mengetikkan pola sebagai berikut:
pasak(.com|pemegang)
.com|holder adalah subgrup dalam kasus ini.
Catatan: penggunaan karakter pergantian dalam hal ini. stake.com atau stakeholder akan tetap dicari. Output dari kode berikut ditemukan:
P='Situs web, stake.com adalah untuk bisnis.'jika [[ $ str=~ taruhan(.dengan|pemegang) ]];kemudian
dibuangditemukan
menjadi
Substring yang cocok di sini adalah stake.com.
Array Standar BASH_REMATCH
BASH_REMATCH adalah larik yang telah ditentukan sebelumnya. Asumsikan bahwa suatu pola memiliki grup. Seluruh grup cocok, masuk ke sel untuk indeks 0 dari array ini. Subkelompok pertama cocok, masuk ke sel untuk indeks 1; subkelompok kedua cocok, masuk ke sel untuk indeks 2, dan seterusnya. Kode berikut menunjukkan cara menggunakan array ini:
P='Penari panggung telah datang.'jika [[ $ str=~ panggung(penari) ]];kemudian
dibuangditemukan
menjadi
untukSayadi dalam ${!BASH_REMATCH[@]};melakukan
printf '${BASH_REMATCH[i]}, '
selesai
dibuang
Outputnya adalah:
ditemukan
penari panggung, penari,
Seluruh kelompok adalah penari panggung. Hanya ada satu subkelompok, yaitu penari.
Catatan: ruang dalam pola telah diloloskan.
Pencocokan Independensi Huruf Besar / Kecil
Pencocokan, seperti yang dijelaskan di atas, peka terhadap huruf besar-kecil. Pencocokan dapat dilakukan secara independen dari kasus ini. Ini diilustrasikan dalam kode berikut:
toko-toko -Stidak cocokP='Kami menyukai musik yang bagus.'
jika [[ $ str=~ Bagus]];kemudian
dibuangditemukan
menjadi
toko-toko -utidak cocok
Outputnya adalah: ditemukan. Polanya, Bagus. Substring yang cocok adalah 'baik'. Perhatikan bagaimana opsi nocasematch telah diaktifkan di awal segmen kode dan dinonaktifkan di akhir segmen kode.
Panjang sebuah String
Sintaks untuk mendapatkan panjang string adalah:
${#PARAMETER}Contoh:
P='Kami menyukai musik yang bagus.'dibuang $ {# str}
Keluarannya adalah: 19.
Pengurangan Tali
Sintaks untuk reduksi string adalah:
${PARAMETER:OFFSET}${PARAMETER:OFFSET:LENGTH}
dimana penghitungan OFFSET dimulai dari nol.
Contoh berikut menunjukkan cara menghapus 11 karakter pertama dari sebuah string:
P='Saya selalu menari dengan musik yang bagus.'dibuang $ {str: 10}
Outputnya adalah:
menyukai musik yang bagus.
Menghitung LENGTH, dimulai dari karakter berikutnya. Kode berikut menunjukkan bagaimana bagian dalam string dapat diizinkan:
P='Saya selalu menari dengan musik yang bagus.'dibuang $ {str: 10: 6}
Outputnya adalah:
selamat datang
11 karakter pertama telah dihapus; 6 karakter berikutnya diizinkan, dan karakter lainnya dihapus secara otomatis.
Cari dan Ganti
Ketika substring ditemukan, itu dapat diganti dengan substring lain. Sintaks untuk ini adalah:
di mana=${PARAMETER/PATTERN/REPLACEMENT}di mana=${PARAMETER//PATTERN/REPLACEMENT}
di mana=${PARAMETER/POLA}
di mana=${PARAMETER//PATTERN}
Untuk sintaks pertama dengan garis miring tunggal, hanya kecocokan pertama yang diganti. Contoh:
P='Ada tikus, kelelawar dan kucing, di dalam kamar.'Baik=${str/[cbr]at/sapi besar}
dibuang $ str
dibuang $ ret
Outputnya adalah:
Ada tikus, kelelawar, dan kucing, di dalam kamar.
Ada sapi besar, kelelawar dan kucing, di dalam kamar.
Untuk sintaks kedua dengan garis miring ganda, semua kemunculan yang cocok akan diganti. Contoh:
P='Ada tikus, kelelawar dan kucing, di dalam kamar.'Baik=${str//[cbr]at/sapi besar}
dibuang $ str
dibuang $ ret
Outputnya adalah:
Ada tikus, kelelawar, dan kucing, di dalam kamar.
Ada sapi besar, sapi besar dan sapi besar, di dalam kamar.
Untuk sintaks ketiga dengan garis miring tunggal, tidak ada pengganti untuk pencocokan pertama dan satu-satunya.
Juga, substring pertama yang ditemukan akan dihapus. Contoh:
P='Ada tikus, kelelawar dan kucing, di dalam kamar.'Baik=${str/[cbr]at}
dibuang $ str
dibuang $ ret
Untuk sintaks keempat dengan garis miring ganda, tidak ada pengganti untuk semua kecocokan. Juga, semua substring yang ditemukan akan dihapus. Contoh:
P='Ada tikus, kelelawar dan kucing, di dalam kamar.'Baik=${str//[cbr]at}
dibuang $ str
dibuang $ ret
Outputnya adalah:
Ada tikus, kelelawar, dan kucing, di dalam kamar.
Ada , a dan a , di dalam ruangan.
Kesimpulan
Untuk memeriksa apakah string memiliki substring di Bash, Pencocokan Pola harus digunakan. Pencocokan Pola tidak hanya berlangsung dalam kondisi tanda kurung ganda, [[ . . . ]]. Itu juga dapat terjadi dalam ekspansi parameter, dengan ${. . .}. Dengan ekspansi parameter, dimungkinkan untuk mendapatkan substring dengan indeks.
Apa yang telah disajikan dalam artikel ini adalah poin paling kritis dalam Pencocokan Pola. Masih ada lagi! Namun, apa yang pembaca harus pelajari selanjutnya, adalah Ekspansi Nama File.