Tips en Trucs 2020

Controleren of een tekst een tekenreeks bevat

Een veel voorkomende taak voor Bash is het bepalen of een tekenreeks (substring) in een tekst (string) voorkomt. Dit kan op verschillende manieren.

Met behulp van jokers

De eenvoudigste manier is het insluiten van de op te sporen tekenreeks (substring) tussen asterisk tekens en dit te vergelijken met de tekst (string). Het voorbeeld gebruikt een if conditie en de 'komt overeen' operator (==) om te controleren of de substring SUB in de string STR voorkomt:

#!/bin/bash
STR='GNU/Linux is een besturingssysteem'
SUB='Linux'
if [[ "$STR" == *"$SUB"* ]]; then
  echo "De tekst bevat de tekenreeks $SUB."
fi

Bij het uitvoeren, wordt het volgende weergegeven:

dany@main:~> sh substring.sh 
De tekst bevat de tekenreeks Linux.

Met behulp van een case structuur

Je kunt de if conditie door een case structuur vervangen. Ons script wordt dan:

#!/bin/bash
STR='GNU/Linux is een besturingssysteem'
SUB='Linux'
case $STR in
  *"$SUB"*)
    echo "De tekst bevat de tekenreeks $SUB."
    ;;
esac

Met behulp van reguliere expressies

Vervangen we in de if conditie de 'komt overeen' operator (==) door de regex operator (=~) dan verwacht bash een reguliere expressie in de daarop volgende string. Een punt gevolgd door een asterisk (.*) komt overeen met geen of meerdere willekeurige tekens (uitgezonderd het newline teken).

#!/bin/bash
STR='GNU/Linux is een besturingssysteem'
SUB='Linux'
if [[ "$STR" =~ .*"$SUB".* ]]; then
  echo "De tekst bevat de tekenreeks $SUB."
fi

Met behulp van grep

De grep opdracht is een specialist in het opsporen van tekenreeksen in teksten. We geven de STR string en de op te sporen SUB substring door aan grep en krijgen een true (gevonden) of false (niet gevonden) terug.

#!/bin/bash
STR='GNU/Linux is een besturingssysteem'
SUB='Linux'
if grep -q "$SUB" <<< "$STR"; then
  echo "De tekst bevat de tekenreeks $SUB."
fi

De -q (--quiet) optie zorgt dat grep niets weergeeft.

Substring Bash

En verder

Controleren of een string een substring bevat is een veel voorkomende taak in Bash scripts. Je kreeg hier een paar methoden, maar wie de awk of sed opdracht kent, kan ook deze opdrachten gebruiken om het gewenst resultaat te bereiken.