GNU/Linux >> Znalost Linux >  >> Linux

Jak zkontrolovat, zda řetězec obsahuje podřetězec v Bash

Máte tedy dlouhý řetězec a chcete zkontrolovat, zda tento řetězec obsahuje podřetězec ve vašem bash skriptu.

Existuje více než jeden způsob, jak zkontrolovat podřetězce v bash shellu. Nejprve ukážu několik jednoduchých příkladů, po kterých bude následovat skvělý bash skript, který tento koncept používá ve scénáři reálného světa.

Kontrola podřetězce v bash pomocí příkazu if else

Pokud jste obeznámeni s podmíněnými příkazy v bash, můžete je použít ke kontrole, zda řetězec obsahuje podřetězec, následujícím způsobem:

if [[ $fullstring == *"$substr"* ]];

Jednoduchý příklad kontroly podřetězce

Zde jsou nutné dvojité závorky. Považuji to za nativní způsob, protože nepoužívá žádný jiný nástroj. Dovolte mi vysvětlit výše uvedený úryvek na správném příkladu.

Inicializujte proměnnou dlouhým řetězcem:

[email protected]:~$ fullstring="This is a string with a stretch"

Nyní uložte slovo „stretch“ do proměnné s názvem substr1 :

[email protected]:~$ substr="stretch"

Udělejme porovnání podřetězců:

[email protected]:~$ if [[ $fullstring == *"$substr"* ]]; then

Zde znamená * nula nebo více znaků. Doufám, že jste obeznámeni s konceptem uvozovek ve skriptování bash. $substr uvnitř uvozovek jej nahradí svou hodnotou.

V podstatě kontrolujete, zda celý řetězec odpovídá xxxxsubstrxxxx typu vzoru.

Můžete také použít podřetězec přímo místo toho, abyste jej používali prostřednictvím proměnné, jako je tato:

[email protected]:~$ if [[ $fullstring == *"stretch"* ]]; then

Pochopíte podstatu. Dovolte mi dokončit tento skript příkazem else, který zobrazí alternativní zprávu, pokud podřetězec není nalezen:

#!/bin/bash

fullstring="This is a string with a stretch"
substr="stretch"

if [[ $fullstring == *"$substr"* ]]; then
        echo "Found $substr!"
else
        echo "$substr not found!"
fi

Můžete snadno vidět, že pokud spustíte výše uvedený skript shell, najde podřetězec.

[email protected]:~$ bash substr.sh
Found stretch!

Lepší reálný příklad pro nalezení podřetězce v bash

Podřetězce mohou být velmi užitečné ve skriptech pro „interakci“ s uživateli. Použijte příkaz read, aby váš bash skript přijal vstup uživatele.

echo "Hey there..what is your name?"
read Name
echo "Hello "$name"! The Matrix Resurrections trailer is here! Is your pill Red or Blue?"
read Pill
if [[ $Pill == *"Red"* || $Pill == *"red"* ]]; then
  echo "Welcome..to the real world "$Name"!"
else
  echo "Wake Up "$Name"!"
fi

Udělte mu oprávnění ke spuštění a spusťte skript:

[email protected]:~$ chmod +x makeyourchoice.sh
[email protected]:~$ ./makeyourchoice.sh

Výstup pro výše uvedený skript:

Hey there..what is your name?
avimanyu
Hello avimanyu! The Matrix Resurrections trailer is here! Is your pill Red or Blue?
I have Red pill
Welcome..to the real world avimanyu!

Zde jsem podmínku if trochu zlepšil tím, že jsem se postaral o dvě pravděpodobné šance na rozlišování malých a velkých písmen. Pouze Red je zde podřetězec. Ale red je také možný vstup. Tak jsem přidal další podmínku. || označuje „nebo“. Pokud zadáte Red , je to podřetězec. Ale i když red není jeden, musel jsem ho přidat.

Vyhledání podřetězce v bash pomocí příkazu grep

Zde je další způsob, jak najít podřetězec v řetězci v bash. Použijte příkaz grep tímto způsobem:

if grep -q "$substr" <<< "$fullstring"; then echo "Found"; fi

q options znamená, že grep bude v tichém režimu a neukáže žádný výstup. Pamatujte prosím, že existují 3 <, nejen 2.

Doufám, že vám tento rychlý tutoriál pomohl při hledání konkrétního podřetězce v řetězci. Pokud máte dotazy nebo návrhy, neváhejte zanechat komentář níže. Btw..kterou pilulku sis vybrala? Vybrali jste si?


Linux
  1. Jak číst řetězec jako hexadecimální číslo v Bash?

  2. Zkontrolujte, zda řetězec obsahuje podřetězec v Pythonu

  3. Jak najít délku struny v Bash [Rychlý tip]

  1. Jak zkontrolovat, zda má Bash zranitelnost Shellshock?

  2. Jak funguje cat << EOF v bash?

  3. Jak zkontrolovat, zda ssh-agent již běží v bash?

  1. Jak zkontrolovat podřetězec v Shell Script Bash?

  2. Jak zkontrolovat, zda Bash může tisknout barvy?

  3. Jak rozdělit řetězec ve skriptu Bash