Bagaimana cara mendeteksi apakah string bash berisi substring di Linux

Fatmawati Ahmad 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 akan menunjukkan beberapa teknik sederhana dan dapat diandalkan.

Mengapa berguna?

Menemukan substring yang lebih kecil adalah persyaratan umum. Contohnya adalah membaca teks dari file atau input manusia dan mencari string untuk substring tertentu sehingga skrip Anda dapat memutuskan apa yang harus dilakukan selanjutnya. Itu dapat mencari label atau nama perangkat dalam file konfigurasi atau string perintah pada baris input pengguna.

Pengguna Linux diberkati dengan berbagai editor teks. Beberapa dibangun ke dalam shell Bash, dan yang lainnya disediakan sebagai utilitas atau aplikasi yang berdiri sendiri. Ada alasan mengapa sistem operasi turunan Unix dikemas dengan fitur manipulasi string.

Beberapa hal yang terlihat seperti file bukan hanya file. Kamu adalah file pribadi Mewakili hal-hal seperti perangkat keras dan sumber informasi sistem. Abstraksi yang dilakukan sistem operasi memberi mereka tampilan dan properti file. Anda dapat membaca informasi dari mereka – dalam bentuk teks, tentu saja – dan terkadang menulisnya, tetapi itu bukan file biasa.

Teks juga digunakan sebagai input dan output untuk perintah di jendela terminal. Hal ini memungkinkan input dan output untuk diarahkan dan diarahkan. Fitur ini mendukung kemampuan untuk menggabungkan urutan perintah Linux dan meneruskan output dari satu perintah sebagai input ke perintah berikutnya.

Terlepas dari asalnya, mencari teks yang diterima untuk kata, perintah, label, atau petunjuk lain yang bermakna merupakan bagian integral dari pemrosesan data teks. Berikut adalah seperangkat teknik sederhana yang dapat Anda masukkan ke dalam skrip Anda.

Temukan substring menggunakan bash buildins

kawat gigi ganda[[...]]Tes perbandingan string dapat digunakan if Instruksi untuk menentukan apakah sebuah string berisi string lain.

Salin skrip ini ke editor dan simpan ke file bernama “double.sh”.

#!/bin/bash

if [[ "monkey" = *"key"* ]]; then
  echo "key is in monkey"
else
  echo "key is not in monkey"
fi

Anda perlu membuat skrip dapat dieksekusi dengan ekstensi chmod Memerintah. Ini adalah langkah yang selalu diperlukan untuk membuat skrip dapat dieksekusi. Anda harus melakukan ini setiap kali Anda membuat file teks. Ganti masing-masing dengan nama skrip yang sesuai.

chmod +x double.sh

Mari kita jalankan skripnya.

./double.sh

Ini berfungsi karena tanda bintang* Urutan karakter apa pun, termasuk tanpa karakter. Jika ‘kunci’ ada di string target, dengan atau tanpa karakter awalan atau akhiran, tes akan mengembalikan nilai true.

Dalam contoh kita, karakter muncul sebelum substring. Ini disertai dengan tanda bintang pertama. Tidak ada karakter setelah substring, tetapi karena tanda bintang juga tidak cocok dengan karakter apa pun, pengujian tetap lolos.

Untuk lebih fleksibel, kami dapat mengubah skrip kami untuk menangani variabel alih-alih string literal. Ini adalah skrip double2.sh.

#!/bin/bash

string="Monkey"
substring="key"

if [[ $string = *$substring* ]]; then
  echo "$substring was found in $string"
else
  echo "$substring was not found in $string"
fi

Mari kita lihat bagaimana kelanjutannya.

./double2.sh

Ini bekerja dengan cara yang sama, dengan keuntungan bahwa kita dapat menggunakan nama variabel daripada literal string. Mengubah solusi kecil kami menjadi fitur memberikan fleksibilitas terbesar.

Ini adalah skrip double3.sh.

#!/bin/bash

shopt -s nocasematch

string="Monkey"
substring="Key"
capital="London"

check_substring ()
{
if [[ $1 = *$2* ]]; then
  echo "$2 was found in $1"
else
  echo "$2 was not found in $1"
fi
}

check_substring "Monkey" "key" 
check_substring $string $substring
check_substring $string "banana"
check_substring "Wales" $capital

Kami memanggil kami check_substring Fungsi dengan kombinasi variabel dan literal string. Kami pernah shopt dengan -s (mengatur) opsi untuk mengatur nocasematchAbaikan pertandingan yang melanggar.

Begini Cara kerjanya.

./double3.sh

Kita dapat menggunakan trik untuk mengelilingi substring dengan tanda bintang case datanya juga. Ini kira-kira sh.

#!/bin/bash

shopt -s nocasematch

string="Wallaby"
substring="Wall"

case $string in

  *$substring*)
    echo "$substring was found in $string"
    ;;

  *)
    echo "Nothing matched: $string"
    ;;
esac

menggunakan case Alih-alih instruksi yang sangat panjang if – Frase membantu memfasilitasi membaca dan mengoreksi teks. Saat Anda perlu memeriksa apakah string berisi salah satu dari banyak kemungkinan substring, case Iklan akan menjadi pilihan terbaik.

./case.sh

Substring ditemukan.

Temukan substring menggunakan grep

Selain bash-in yang disertakan, alat pencarian teks pertama yang mungkin Anda temui adalah grep. kita bisa menggunakan grepKemampuan bawaan untuk mencari string dalam string untuk menemukan substring kita.

Skrip ini disebut subgrep.sh.

#!/bin/bash

string="porridge pot"
substring="ridge"

if $(echo $string | grep -q $substring); then
  echo "$substring was found in $string"
else
  echo "$substring was not found in $string"
fi

teks yang digunakan echo untuk mengirim string grep, yang mencari substring. Kami menggunakannya -q Opsi jeda (diam). grep Tulis sesuatu ke output standar.

Jika hasil dari perintah dalam tanda kurung “(...)‘ sama dengan nol, artinya ditemukan kecocokan. Karena nol adalah true di bawah if iklan penuh then Kondisi terpenuhi.

Mari kita lihat seperti apa produksinya.

./subgrep.sh

Temukan substring dengan sed

kita bisa menggunakan sed Juga untuk menemukan substring.

By default, sed prints all text that is fed into it. Using sed -n prevents this. The only lines that are printed are matching lines. This expression will print any lines that match or contain the value of $substring.

"/$substring/p"

Kami menciptakan nilai $string di sed Dengan pengalihan di sini, <<<. Ini digunakan untuk meneruskan nilai ke perintah di shell saat ini. Jangan memanggil sub-kulit seperti tabung.

pertama -n adalah ujian. akan kembali true Jika keluaran sed Ini bukan nol. Hanya dengan begitu hasilnya dapat terlihat seperti ini sed Mungkin bukan nol jika baris yang cocok ditemukan. Jika ini masalahnya, $substring Itu pasti ditemukan $string.

Ini adalah subsed.sh.

#!/bin/bash

string="Sweden"
substring="eden"

if [ -n "$(sed -n "/$substring/p" <<< $string)" ]; then
  echo "$substring was found in $string"
else
  echo "$substring was not found in $string"
fi

Kami mendapatkan respons yang diharapkan ketika skrip dijalankan.

./subsed.sh

Kita dapat menguji logika skrip dengan memanipulasi nilai $substring Sampai perbandingan gagal.

./subsed.sh

Saya pikir berhenti mencari

Alat lain dapat menemukan substring, seperti awk Dan Perl Tetapi kasus penggunaan sederhana seperti mencari substring tidak membenarkan fungsionalitas tambahan atau kompleksitas tambahannya. Secara khusus, menggunakan fungsi bash bawaan untuk mencari substring cepat dan mudah dan tidak memerlukan alat eksternal.

terkait: Cara menggunakan klausa kasus dalam skrip bash

Baca Juga!

Kamis Malam Football: Berikut cara menonton dan streaming Dolphins vs Bengals di Prime Video atau Twitch malam ini

Kamis Malam Football: Cara Streaming Dolphins vs Bengals di Prime Video atau Twitch Malam Ini …