Bagaimana Mengenalinya Jika Bash String Berisi Substring di Linux
Diterbitkan: 2022-09-21Terkadang dalam skrip Linux, Anda ingin mengetahui apakah string teks berisi string tertentu yang lebih kecil. Ada banyak cara untuk melakukan ini. Kami menunjukkan kepada Anda beberapa teknik sederhana dan andal.
Mengapa Ini Berguna?
Mencari string untuk substring yang lebih kecil adalah persyaratan umum. Salah satu contohnya adalah membaca teks dari file atau dari input manusia dan mencari string untuk substring tertentu sehingga skrip Anda dapat memutuskan apa yang harus dilakukan selanjutnya. Mungkin mencari label atau nama perangkat dalam file konfigurasi atau string perintah di baris input dari pengguna.
Pengguna Linux diberkati dengan sejumlah utilitas untuk memanipulasi teks. Beberapa dibangun ke dalam shell Bash, yang lain disediakan sebagai utilitas atau aplikasi mandiri. Ada alasan mengapa sistem operasi turunan Unix disajikan secara kaya dengan kemampuan manipulasi string.
Beberapa hal yang tampak seperti file bukanlah file sederhana. Mereka adalah file khusus yang mewakili hal-hal seperti perangkat keras dan sumber informasi sistem. Abstraksi yang dilakukan oleh sistem operasi memberi mereka tampilan dan karakteristik file. Anda dapat membaca informasi darinya—sebagai teks, tentu saja—dan dalam beberapa kasus menulis kepada mereka, tetapi itu bukan file biasa.
Teks juga digunakan sebagai input dan output untuk perintah di jendela terminal. Ini memungkinkan pengalihan dan pemipaan input dan output. Fungsionalitas itu mendukung kemampuan untuk merangkai urutan perintah Linux bersama-sama, meneruskan output dari satu perintah sebagai input ke perintah berikutnya.
Terlepas dari asalnya, mencari teks yang kita terima untuk kata, perintah, label, atau indikator penting lainnya adalah bagian standar dalam menangani data berbasis teks. Berikut adalah kumpulan teknik sederhana yang dapat Anda sertakan dalam skrip Anda sendiri.
Menemukan Substring Dengan Bash Builtin
Uji perbandingan string tanda kurung ganda “ [[...]]
” dapat digunakan dalam pernyataan if
untuk menentukan apakah satu string berisi string lain.
Salin skrip ini ke editor, dan simpan ke file bernama “double.sh.”
#!/bin/bash if [[ "monyet" = *"kunci"* ]]; kemudian echo "kuncinya ada di monyet" kalau tidak echo "kunci tidak ada di monyet" fi
Anda harus membuat skrip dapat dieksekusi dengan perintah chmod
. Ini adalah langkah yang selalu diperlukan untuk membuat skrip apa pun dapat dieksekusi. Anda harus melakukan ini setiap kali membuat file skrip. Ganti nama skrip yang sesuai dalam setiap kasus.
chmod +x double.sh
Mari kita jalankan skripnya.
./double.sh
Ini berfungsi karena tanda bintang ” *
” mewakili urutan karakter apa pun, termasuk tanpa karakter. Jika "kunci" substring terletak di dalam string target, dengan atau tanpa karakter apa pun di depan atau di belakangnya, tes akan mengembalikan nilai true.
Dalam contoh kita, ada karakter di depan substring. Ini dicocokkan dengan tanda bintang pertama. Tidak ada huruf di belakang substring tetapi, karena tanda bintang juga tidak cocok dengan karakter, tes tetap lulus.
Untuk fleksibilitas, kami dapat memodifikasi skrip kami untuk menangani variabel alih-alih string literal. Ini adalah skrip "double2.sh."
#!/bin/bash string = "Monyet" substring = "kunci" if [[ $string = *$substring* ]]; kemudian echo "$substring ditemukan di $string" kalau tidak echo "$substring tidak ditemukan di $string" fi
Mari kita lihat bagaimana itu berjalan.
./double2.sh
Ini bekerja dengan cara yang sama, dengan keuntungan bahwa kita dapat menggunakan nama variabel daripada string literal. Mengubah solusi kecil kami menjadi sebuah fungsi akan memberikan fleksibilitas paling besar.
Ini adalah skrip "double3.sh."
#!/bin/bash shopt -s nocasematch string = "Monyet" substring = "Kunci" ibukota = "London" cek_substring () { jika [[ $1 = *$2* ]]; kemudian echo "$2 ditemukan di $1" kalau tidak echo "$2 tidak ditemukan di $1" fi } check_substring "Monyet" "kunci" check_substring $string $substring check_substring $string "pisang" check_substring "Wales" $capital
Kami memanggil fungsi check_substring
kami menggunakan campuran variabel dan string literal. Kami menggunakan shopt
dengan opsi -s
(set) untuk mengatur nocasematch
, untuk membuat kecocokan tidak peka huruf besar/kecil.
Berikut cara menjalankannya.
./double3.sh
Kita dapat menggunakan trik membungkus substring dalam tanda bintang dalam pernyataan case
juga. Ini adalah "case.sh."
#!/bin/bash shopt -s nocasematch string = "Wallabi" substring = "Dinding" kasus $string masuk *$substring*) echo "$substring ditemukan di $string" ;; *) echo "Tidak ada yang cocok: $string" ;; esac
Menggunakan pernyataan case
alih-alih pernyataan if
yang sangat panjang dapat membuat skrip lebih mudah dibaca dan di-debug. Jika Anda perlu memeriksa apakah string berisi salah satu dari banyak kemungkinan substring, pernyataan case
akan menjadi pilihan terbaik.
./case.sh
Substring ditemukan.
Menemukan Substring Dengan grep
Di luar bawaan Bash, alat pencarian teks pertama yang mungkin Anda jangkau adalah grep
. Kita dapat menggunakan kemampuan bawaan grep
untuk mencari string di dalam string untuk mencari substring kita.
Skrip ini disebut "subgrep.sh."
#!/bin/bash string = "panci bubur" substring = "punggungan" if $(echo $string | grep -q $substring); kemudian echo "$substring ditemukan di $string" kalau tidak echo "$substring tidak ditemukan di $string" fi
Script menggunakan echo
untuk mengirim string ke grep
, yang mencari substring. Kami menggunakan opsi -q
(tenang) untuk menghentikan grep
menulis apa pun ke keluaran standar.
Jika hasil perintah di dalam tanda kurung “ (...)
” sama dengan nol, berarti ditemukan kecocokan. Karena nol sama dengan true
di Bash, pernyataan if
terpenuhi dan klausa then
dieksekusi.
Mari kita lihat apa outputnya.
./subgrep.sh
Menemukan Substring Dengan sed
Kita juga bisa menggunakan sed
untuk menemukan substring.
Secara default, sed
mencetak semua teks yang dimasukkan ke dalamnya. Menggunakan sed -n
mencegah ini. Satu-satunya garis yang dicetak adalah garis yang cocok. Ekspresi ini akan mencetak setiap baris yang cocok atau berisi nilai $substring.
"/$substring/p"
Kami memasukkan nilai $string
ke sed
menggunakan pengalihan di sini, <<<
. Ini digunakan untuk mengarahkan nilai ke perintah di shell saat ini. Itu tidak memanggil subkulit seperti yang dilakukan pipa.
-n
pertama adalah tes. Ini akan mengembalikan true
jika output dari perintah sed
bukan nol. Satu-satunya cara agar keluaran dari sed
tidak nol adalah jika ditemukan garis yang cocok. Jika itu masalahnya, $substring
pasti ditemukan di $string
.
Ini adalah "subsed.sh."
#!/bin/bash string = "Swedia" substring = "eden" if [ -n "$(sed -n "/$substring/p" <<< $string)" ]; kemudian echo "$substring ditemukan di $string" kalau tidak echo "$substring tidak ditemukan di $string" fi
Kami mendapatkan respons yang diharapkan ketika kami menjalankan skrip.
./subsed.sh
Kita dapat menguji logika skrip dengan mengedit nilai $substring
sehingga perbandingan gagal.
./subsed.sh
Berhenti Mencari, Menemukannya
Alat lain dapat menemukan substring, seperti awk
dan Perl
, tetapi kasus penggunaan sederhana seperti menemukan substring tidak menjamin fungsionalitas ekstra maupun kompleksitas tambahan. Secara khusus, menggunakan builtin Bash untuk mencari substring cepat, sederhana, dan tidak memerlukan alat eksternal.
TERKAIT: Cara Menggunakan Pernyataan Kasus dalam Skrip Bash