Bagaimana Mengenalinya Jika Bash String Berisi Substring di Linux

Diterbitkan: 2022-09-21
Laptop Linux menampilkan prompt bash
fatmawati achmad zaenuri/Shutterstock.com

Terkadang 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.

Cara Memanipulasi String di Bash di Linux
TERKAIT Cara Memanipulasi String di Bash di Linux

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 
Cara Menggunakan Tes Kondisional Braket Ganda di Linux
TERKAIT Cara Menggunakan Tes Kondisional Braket Ganda di Linux

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 

membuat skrip dapat dieksekusi dengan chmod

Mari kita jalankan skripnya.

 ./double.sh 

Menjalankan skrip 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 

Menjalankan skrip 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 

Menjalankan skrip 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 

Menjalankan skrip 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.

Cara Menggunakan Perintah grep di Linux
TERKAIT Cara Menggunakan Perintah grep di Linux

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 

Menjalankan skrip 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.

Cara Menggunakan Perintah sed di Linux
TERKAIT Cara Menggunakan Perintah sed di Linux

-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 

Menjalankan skrip subsed.sh

Kita dapat menguji logika skrip dengan mengedit nilai $substring sehingga perbandingan gagal.

./subsed.sh

Menjalankan skrip subsed.sh dengan substring yang tak tertandingi

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