Hoe weet ik of een Bash-string een substring bevat op Linux?

0
112
fatmawati achmad zaenuri/Shutterstock.com

Soms wil je in Linux-scripts weten of een tekstreeks een specifieke, kleinere tekenreeks bevat. Er zijn veel manieren om dit te doen. We laten u enkele eenvoudige, betrouwbare technieken zien.

Waarom is dit nuttig?

Het zoeken naar een tekenreeks voor een kleinere subtekenreeks is een veelvoorkomende vereiste. Een voorbeeld is het lezen van tekst uit een bestand of van menselijke invoer en het zoeken in de tekenreeks naar een specifieke subtekenreeks, zodat uw script kan beslissen wat het vervolgens moet doen. Het kan zoeken naar een label of apparaatnaam in een configuratiebestand of een opdrachtstring in een invoerregel van een gebruiker.

Linux-gebruikers zijn gezegend met een onbeperkt aantal hulpprogramma's voor het manipuleren van tekst. Sommige zijn ingebouwd in de Bash-shell, andere worden geleverd als zelfstandige hulpprogramma's of toepassingen. Er is een reden waarom Unix-afgeleide besturingssystemen rijkelijk voorzien zijn van mogelijkheden voor stringmanipulatie.

GERELATEERDSnaren manipuleren in Bash op Linux

Sommige dingen die op bestanden lijken, zijn geen eenvoudige bestanden. Het zijn speciale bestanden die zaken als hardwareapparaten en bronnen van systeeminformatie vertegenwoordigen. De abstractie die door het besturingssysteem wordt uitgevoerd, geeft ze het uiterlijk en de kenmerken van bestanden. Je kunt er natuurlijk informatie uit lezen als tekst en in sommige gevallen naar ze schrijven, maar het zijn geen gewone bestanden.

Tekst wordt ook gebruikt als invoer en uitvoer voor opdrachten in een terminalvenster. Dit maakt het omleiden en doorleiden van input en output mogelijk. Die functionaliteit ondersteunt de mogelijkheid om reeksen van Linux-opdrachten aan elkaar te koppelen, waarbij de uitvoer van de ene opdracht wordt doorgegeven als de invoer naar de volgende.

Ongeacht de oorsprong, het doorzoeken van de tekst die we ontvangen op een belangrijk woord, commando, label of een andere indicator is een standaard onderdeel van het omgaan met op tekst gebaseerde gegevens. Hier is een verzameling van eenvoudige technieken die u in uw eigen scripts kunt opnemen.

Substrings zoeken met Bash-ingebouwde elementen

De dubbele haakjes “[[…]]” tekenreeksvergelijkingstest kan worden gebruikt in  if-instructies om te bepalen of een tekenreeks een andere tekenreeks bevat.

Kopieer dit script naar een editor en sla het op in een bestand met de naam “double.sh.”

#!/bin/bash if [[ “monkey” = *”key”* ]] ; dan   echo “sleutel zit in aap” else   echo “sleutel zit niet in aap” fi GERELATEERDVoorwaardelijke tests met dubbele haakjes gebruiken in Linux

U moet het script uitvoerbaar maken met de opdracht chmod. Dit is een stap die altijd nodig is om elk script uitvoerbaar te maken. U moet dit elke keer doen als u een scriptbestand maakt. Vervang in elk geval de naam van het juiste script.

chmod +x double.sh

< /p>

Laten we het script uitvoeren.

./double.sh

Dit werkt omdat het sterretje ” * ” staat voor elke reeks tekens, inclusief geen tekens. Als de substring “key” zich binnen de doeltekenreeks bevindt, met of zonder tekens ervoor of erachter, zal de test true retourneren.

In ons voorbeeld staan ​​er tekens voor de subtekenreeks. Deze worden geëvenaard door het eerste sterretje. Er staan ​​geen letters achter de substring, maar omdat een asterisk ook niet overeenkomt met geen karakters, slaagt de test nog steeds.

Voor flexibiliteit kunnen we ons script aanpassen om variabelen te verwerken in plaats van letterlijke strings. Dit is script “double2.sh.”

#!/bin/bash string=”Monkey” substring=”key” if [[ $string = *$substring* ]]; dan echo “$substring werd gevonden in $string” else echo “$substring werd niet gevonden in $string” fi

Laten we eens kijken hoe dat werkt.

./double2.sh

< img src="http://www.howtogeek.com/pagespeed_static/1.JiBnMqyl6S.gif" />

Dit werkt op dezelfde manier, met als voordeel dat we variabelenamen kunnen gebruiken in plaats van letterlijke snaren. Het omzetten van onze kleine oplossing in een functie biedt de meeste flexibiliteit.

Dit is script “double3.sh.”

#!/bin/bash shopt -s nocasematch string=”Monkey” substring=”Key” capital=”London” check_substring () { if [ [ $1 = *$2* ]]; dan echo “$2 werd gevonden in $1” else echo “$2 werd niet gevonden in $1” fi } check_substring “Monkey” “key” check_substring $string $substring check_substring $string “banana” check_substring “Wales” $capital

We noemen onze check_substring functie met een mix van variabelen en letterlijke strings. We gebruikten shopt met zijn -s (set) optie om nocasematch in te stellen, om de overeenkomsten hoofdletterongevoelig te maken.

Zo werkt het.

./double3.sh

We kunnen ook de truc gebruiken om de substring in asterisken te plaatsen in case-statements. Dit is “case.sh.”

#!/bin/bash shopt -s nocasematch string=”Wallaby” substring=”Wall” case $string in *$substring*) echo “$ substring is gevonden in $string” ;; *) echo “Niets overeenkomt: $string” ;; esac

Door gebruik te maken van case-statements in plaats van erg lange if-statements, kunnen scripts gemakkelijker te lezen en te debuggen worden. Als u moet controleren of een tekenreeks een van de vele mogelijke subtekenreeksen bevat, is de case-instructie de beste keuze.

./case.sh

De substring is gevonden.

Substrings zoeken met grep

< p>Naast de ingebouwde Bash is grep de eerste tool voor het zoeken naar tekst waar je waarschijnlijk naar zult grijpen. We kunnen het aangeboren vermogen van grep gebruiken om naar een tekenreeks binnen een tekenreeks te zoeken om onze subtekenreeksen te zoeken.

Dit script heet “subgrep.sh.”

#!/bin/bash string=”pappot” substring=”ridge” if $(echo $string | grep -q $substring); dan echo “$substring werd gevonden in $string” else echo “$substring werd niet gevonden in $string” fi

Het script gebruikt echo om de tekenreeks naar grep te sturen, die naar de subtekenreeks zoekt. We gebruiken de -q (stille) optie om te voorkomen dat grep iets naar standaarduitvoer schrijft.

GERELATEERDHoe het grep-commando onder Linux te gebruiken

Als het resultaat van de commando's tussen haakjes “(…)” gelijk is aan nul, betekent dit dat er een overeenkomst is gevonden. Omdat nul gelijk is aan waar in Bash, wordt voldaan aan het if-statement en wordt de then-clausule uitgevoerd.

Laten we eens kijken wat de output is.

./subgrep.sh

Substrings zoeken met sed

We kunnen sed ook gebruiken om een ​​subtekenreeks te vinden.

Sedert standaard drukt sed alle tekst af die erin wordt ingevoerd. Het gebruik van sed -n voorkomt dit. De enige lijnen die worden afgedrukt, zijn overeenkomende lijnen. Deze uitdrukking drukt alle regels af die overeenkomen met of de waarde van $substring bevatten.

“/$substring/p”

We voeren de waarde van $string in sed in met behulp van een here-redirect, <<<. Dit wordt gebruikt om waarden om te leiden naar een opdracht in de huidige shell. Het roept geen subshell aan zoals een pipe dat zou doen.

GERELATEERDHoe de sed-opdracht op Linux te gebruiken

De eerste -n is de test. Het zal true retourneren als de uitvoer van het sed-commando niet nul is. De enige manier waarop de uitvoer van sed niet-nul kan zijn, is als er een overeenkomende regel is gevonden. Als dat het geval is, moet $substring gevonden zijn in $string.

Dit is “subsed.sh.”

#!/bin/bash string=”Zweden” substring=”eden” if [ -n “$(sed -n “/$substring/p” <<< $string)” ]; dan echo “$substring werd gevonden in $string” else echo “$substring werd niet gevonden in $string” fi

We krijgen het verwachte antwoord wanneer we het script uitvoeren.

./subsed.sh

We kunnen de logica van het script testen door de waarde van $substring te bewerken zodat de vergelijking mislukt.

./subsed.sh

Stop met zoeken, gevonden

Andere tools kunnen substrings vinden, zoals awk en Perl, maar een eenvoudige use-case zoals het vinden van een substring rechtvaardigt hun extra functionaliteit of de toegevoegde complexiteit niet. In het bijzonder is het gebruik van de ingebouwde Bash om naar substrings te zoeken snel, eenvoudig en vereist geen externe tools.

GERELATEERD: Hoe gebruik je Case Statements? in Bash-scripts

LEES VOLGENDE

  • › Het Always-On Display van de iPhone 14 Pro uitschakelen
  • › Gigabyte's nieuwe monitor is voor beide bureau-pc's
  • › Een wifi-gastnetwerk gebruiken? Controleer deze instellingen
  • › Hoe plaats je een luchtreiniger het beste
  • › Een Microsoft-sjabloon gebruiken voor uw Outlook-handtekening
  • › 10 Steam-functies die u zou moeten gebruiken