Strings manipuleren in Bash op Linux

fatmawati achmad zaenuri/Shutterstock.com

Als er iets is waar Linux goed mee uitgerust is, dan zijn het wel hulpprogramma’s voor het manipuleren van strings. Maar er is ook een hele reeks functionaliteit ingebouwd in de Bash-shell. Hier is hoe het wordt gebruikt.

Snaarmanipulatie

Het Linux-ecosysteem zit boordevol fantastische tools om met tekst en strings te werken. Deze omvatten awk, grep, sed en cut. Voor elk zwaargewicht tekstgekibbel, zouden dit uw favoriete keuzes moeten zijn.

Soms is het echter handig om de ingebouwde mogelijkheden van de shell te gebruiken, vooral als je een kort en eenvoudig script schrijft. Als uw script met andere mensen wordt gedeeld en het op hun computers wordt uitgevoerd, betekent het gebruik van de standaard Bash-functionaliteit dat u zich geen zorgen hoeft te maken over de aanwezigheid of versie van een van de andere hulpprogramma’s.

Als je de kracht van de speciale hulpprogramma’s nodig hebt, gebruik ze dan zeker. Daar zijn ze voor. Maar vaak kunnen je script en Bash de klus alleen klaren.

Omdat ze Bash ingebouwd zijn, kun je ze gebruiken in scripts of op de opdrachtregel. Het gebruik ervan in een terminalvenster is een snelle en gemakkelijke manier om een ​​prototype van uw opdrachten te maken en de syntaxis te perfectioneren. Het vermijdt de cyclus voor bewerken, opslaan, uitvoeren en debuggen.

Tekenreeksvariabelen maken en ermee werken

Het enige wat we nodig hebben om een ​​variabele te declareren en er een string aan toe te wijzen, is de variabele een naam te geven en het isgelijkteken te gebruiken =, en geef de tekenreeks op. Als er spaties in uw tekenreeks staan, plaatst u deze tussen enkele of dubbele aanhalingstekens. Zorg ervoor dat er geen witruimte is aan weerszijden van het gelijkteken.

my_string="Hello, How-To Geek World."
echo $my_string

Een stringvariabele maken en schrijven

Nadat u een variabele hebt gemaakt, wordt die variabelenaam toegevoegd aan de lijst met woorden voor het aanvullen van tabbladen in de shell. In dit voorbeeld typt u “mijn_” en drukt u op de “Tab”-toets om de volledige naam op de opdrachtregel in te voeren.

Alleen-lezen variabelen

Er is een declare commando dat we kunnen gebruiken voor het declareren van variabelen. In eenvoudige gevallen heb je het niet echt nodig, maar als je het gebruikt, kun je enkele van de opties van het commando gebruiken. Waarschijnlijk degene die je het meest zou gebruiken is de -r (alleen-lezen) optie. Dit creëert een alleen-lezen variabele die niet kan worden gewijzigd.

declare -r read_only_var="This is an immutable string!"

Als we proberen er een nieuwe waarde aan toe te kennen, mislukt het.

read_only_var="A new string..."

Kan een alleen-lezen tekenreeksvariabele niet wijzigen

Schrijven naar het terminalvenster

We kunnen verschillende strings naar het terminalvenster schrijven met echo of printf, zodat het lijkt alsof ze één string zijn. En we zijn niet beperkt tot onze eigen strings-variabelen, we kunnen omgevingsvariabelen opnemen in onze commando’s.

user_account="Your user account is:"
echo $user_account $USER

Twee strings naar het terminalvenster schrijven alsof ze één string zijn

Strings aaneenschakelen

De plus-is-operator, +=, laat je twee strings aan elkaar “toevoegen”. Aaneenschakelen heet dat.

user_account="Your user account is:"
user_account+=$USER
echo $user_account

Strings samenvoegen met +=

Merk op dat er niet automatisch een spatie wordt toegevoegd tussen aaneengeschakelde tekenreeksen. Als u een spatie nodig heeft, moet u deze expliciet aan het einde van de eerste reeks of aan het begin van de tweede plaatsen.

user_account="Your user account is: "
user_account+=$USER
echo $user_account

Een extra spatie toevoegen voordat += wordt gebruikt om twee strings samen te voegen

VERWANT: Omgevingsvariabelen instellen in Bash op Linux

Gebruikersinvoer lezen

Naast het maken van stringvariabelen waarvan de inhoud is gedefinieerd als onderdeel van hun declaratie, kunnen we gebruikersinvoer inlezen in een stringvariabele.

De read commando leest gebruikersinvoer. De -p (prompt) optie schrijft een prompt naar het terminalvenster. De invoer van de gebruiker wordt opgeslagen in de stringvariabele. In dit voorbeeld heet de variabele user_file.

read -p "Open which file? " user_file
echo $user_file

Invoer gebruikersstring lezen

Als u geen variabele tekenreeks opgeeft om de invoer vast te leggen, werkt het nog steeds. De gebruikersinvoer wordt opgeslagen in een variabele genaamd REPLY.

read -p "Open which file? "
echo $REPLY

Gebruikersinvoer lezen zonder een stringvariabele op te geven

Het is meestal handiger om uw eigen variabele op te geven en deze een betekenisvolle naam te geven.

Snaren manipuleren

Nu we onze strings hebben, of ze nu gedefinieerd zijn tijdens het maken, gelezen van gebruikersinvoer, of gecreëerd door strings samen te voegen, kunnen we er dingen mee gaan doen.

De snaarlengte vinden

Als het belangrijk of nuttig is om de lengte van een string te weten, kunnen we deze verkrijgen door de variabelenaam vooraf te laten gaan door een hash “#‘ symbool.

my_string="There are 39 characters in this string."
echo ${#my_string}

De lengte van een string krijgen

We kunnen een subtekenreeks extraheren uit een tekenreeksvariabele door een startpunt in de tekenreeks en een optionele lengte op te geven. Als we geen lengte opgeven, bevat de subtekenreeks alles van het beginpunt tot het laatste teken.

Het startpunt en de lengte volgen de naam van de variabele, met een dubbele punt “:tussen hen. Merk op dat de karakters in een stringvariabele genummerd zijn vanaf nul.

long_string="Frankenstein or the Modern Prometheus"
substring=${long_string:0:12}
echo $substring
echo ${long_string:27}

Substrings extraheren vanaf het begin en einde van een string

Een andere variatie laat je een aantal letters weggooien vanaf het einde van de string. In feite kunt u hiermee een startpunt instellen en een negatief getal als lengte gebruiken. De subtekenreeks bevat de tekens vanaf het beginpunt tot het einde van de tekenreeks, minus het aantal tekens dat u in het negatieve getal hebt opgegeven.

my_string="alphabetical"
echo ${my_string:5:-4}

Een subtekenreeks uit het midden van een tekenreeks extraheren

In alle gevallen blijft de oorspronkelijke stringvariabele ongewijzigd. De “geëxtraheerde” substring wordt niet daadwerkelijk verwijderd uit de inhoud van de variabele.

Het nadeel van het gebruik van karakterverschuivingen is dat u van tevoren moet weten waar de substrings die u wilt extraheren zich binnen de string bevinden.

Als uw tekenreeks wordt gescheiden door een herhalend teken, kunt u subtekenreeksen extraheren zonder te weten waar ze zich in de tekenreeks bevinden en ook niet hoe lang ze zijn.

Als u vanaf de voorkant van de tekenreeks wilt zoeken, volgt u de naam van de variabele met dubbele procenttekens, %%het begrenzende karakter en een asterisk, *. De woorden in deze string worden gescheiden door spaties.

long_string="first second third fourth fifth"
echo ${long_string%%' '*}

Een subtekenreeks extraheren van de voorkant van een tekenreeks door een scheidingsteken

Dit retourneert de eerste subtekenreeks vanaf de voorkant van de tekenreeks die het scheidingsteken niet bevat. Dit wordt de korte substring-optie genoemd.

De optie lange subtekenreeks retourneert het voorste deel van de tekenreeks tot aan de laatste begrensde subtekenreeks. Met andere woorden, het laat de laatste begrensde subtekenreeks weg. Syntactisch gezien is het enige verschil dat het een enkel procentteken gebruikt”%” in de opdracht.

long_string="first second third fourth fifth"
echo ${long_string%' '*}

Een lange subtekenreeks extraheren vanaf de voorkant van een tekenreeks door een scheidingsteken

Zoals je zou verwachten, kun je op dezelfde manier zoeken vanaf het einde van de string. Gebruik in plaats van een procentteken een hash “#” teken, en verplaats het scheidingsteken om te komen na het sterretje*” in de opdracht.

long_string="this.long.string.of.words.is.delimited.by.periods"
echo ${long_string##*.}

Een subtekenreeks extraheren vanaf het einde van een tekenreeks door scheidingsteken

Dit is de korte substringoptie, het snijdt de eerste substring af die het vindt vanaf de achterkant van de string die geen scheidingsteken bevat.

long_string="this.long.string.of.words.is.delimited.by.periods"
echo ${long_string#*.}

Een lange subtekenreeks extraheren vanaf het einde van een tekenreeks door scheidingsteken

De optie lange subtekenreeks retourneert het achterste deel van de tekenreeks tot aan het eerste scheidingsteken vanaf de voorkant van de tekenreeks. Met andere woorden, de eerste begrensde subtekenreeks wordt weggelaten.

Subtekenreeksvervanging

Substrings omwisselen voor andere substrings is eenvoudig. Het formaat is de naam van de tekenreeks, de subtekenreeks die wordt vervangen en de subtekenreeks die wordt ingevoegd, gescheiden door een schuine streep “/“karakters.

string="blue pig giggles"
echo ${string/pig/goat}

Een subtekenreeks in een tekenreeks vervangen

Om de zoekopdracht te beperken tot het einde van de tekenreeks, laat u de zoekreeks voorafgaan door een procentteken”% “karakter.

string="blue pig giggles"
echo ${string/%giggles/chuckles}

Een subtekenreeks aan het einde van een tekenreeks vervangen

Om de zoekopdracht te beperken tot het begin van de tekenreeks, laat u de zoekreeks voorafgaan door een hash “#“karakter.

string="blue pig giggles"
echo ${string/#blue/yellow}

Een subtekenreeks aan het begin van een tekenreeks vervangen

Een string is een flexibel ding

Als een string niet precies is zoals je hem zou willen of nodig hebt, zullen deze tools je helpen hem opnieuw te formatteren zodat hij aan je behoeften voldoet. Gebruik voor gecompliceerde transformaties de speciale hulpprogramma’s, maar gebruik voor de kleine aanpassingen de ingebouwde shell en vermijd de overhead van het laden en uitvoeren van een externe tool.

VERWANT: Alles wat je ooit wilde weten over inodes op Linux

Leave a Comment