Leer Linux

String vervangen in Bash

String vervangen in Bash

Bash is een UNIX shell-compatibel commandoproces waarvan de belangrijkste taak het manipuleren van strings in een shell-omgeving is. Er wordt soms een beroep gedaan op programmeurs om aan verschillende bestanden te werken. Ze kunnen delen of het hele bestand toevoegen, verwijderen en vervangen om bij hun werk te passen. Dit doet een beroep op de kennis van het vervangen van string in bash. Gegevensopslag kan tijdelijk of permanent zijn, afhankelijk van de aard van de gegevens. Bestandsreeks is essentieel bij het vervangen van bestandsinhoud.

String vervangen in Bash

sed is van vitaal belang en is handig om te helpen bij het vervangen van strings in een bestand met bash-scripts. De tekenreekseditor kan op verschillende manieren worden gebruikt om de bestandsinhoud in bash te vervangen. Een alternatieve maar goed klinkende snaareditor is onhandig die in het spel kan worden gebracht bij het vervangen van de tekenreekswaarde uit een bestand met bash. Dit artikel laat aan de hand van voorbeelden zien hoe de bestandsinhoud kan worden vervangen in bash. Merk op dat kennis in regex-patronen ook van grote waarde kan zijn bij het vervangen van string in bash.

Bash-snaarmanipulatie

Bij kleine of eenvoudige vervangingen is de sed niet vereist. Bash kan de manipulatie doen.

Bijvoorbeeld:
Bij het vervangen van een fosslinux.gif met .mp4, sed is niet vereist.
Gebruik de onderstaande gecodeerde tekst om het proces met bash uit te voeren:

#/bin/bash bestandsnaam = "fosslinux".gif" new_extension="mp4" # Vervangen .gif met .mp4 generated_file_name=$file_name/.gif/.$new_extension echo generated_file_name

String vervangen met sed

sed kan een stream-editor worden genoemd. Sed kan een string in bestanden vervangen. Laten we eens kijken naar een voorbeeld van een bestand met de naam singleboardbytes.txt met de volgende informatie:
Foss Linux is een geweldige leersite voor elke Linux-gebruiker. Bekijk artikelen gepubliceerd door Foss Linux op hun site.

Nu moeten we uit ons bestand het woord "website" met "website” en hernoem het bestand naar fosslinux.tekst.

De sed-syntaxis begrijpen

sed -i 's/search_string/replace_string/' bestandsnaam sed - is de opdracht die wordt gebruikt bij de uitvoering van de bovenstaande syntaxis '-ik' - gebruikt bij het wijzigen van de inhoud in het originele bestand met een vervangende tekenreekshulp wanneer de zoekwaarde in het bestand bestaat. 'zo' - dit is het vervangende commando 'search_string' - dit vertegenwoordigt de tekenreekswaarde waarnaar moet worden gezocht voor vervanging in het originele bestand 'vervang_string' - dit vertegenwoordigt de tekenreekswaarde die wordt gebruikt om de gezochte waarde te vervangen. De tekenreeks moet overeenkomen met de tekenreeks die is gevonden met de opdracht 'search_string'. 'bestandsnaam' - dit is de bestandsnaam waarbij de vervanging wordt toegepast.

Voer de volgende opdracht uit in uw terminal:

sed 's/site/website/g' singleboardbytes.txt > fosslinux.tekst

Snaarvervanging met sed

Opmerking: je kunt het bovenstaande commando ook uitvoeren door het als bash-script in te voeren.
Vervangen met behulp van de -ik opdracht

Na het uitvoeren van de opdracht, is de volgende stap om te vervangen met behulp van de -ik opdracht. -ik is een weergave voor "op zijn plaats", wat betekent dat het bestand alleen wordt vervangen en dat er geen extra bestanden worden gemaakt. Gebruik ons ​​voorbeeld hierboven en voer de volgende opdracht uit:

sed -i 's/site/website/g' singleboardbytes.tekst

Vervangen met het -i commando

In de onderstaande afbeelding ziet u een uitroepteken dat zegt: Het bestand "/home/tuts/singleboardbytes.txt gewijzigd op schijf.” dit geeft aan dat de wijzigingen met succes zijn aangebracht.

Wijzigingen aangebracht in singleboardbytes.tekst

De onderstaande afbeelding is het bestand met de wijzigingen die in de vorige stap zijn aangebracht, zowel in de naam van het bestand (singleboardbytes.txt naar fosslinux.txt) en het woord website is veranderd in de website.

Laatste wijziging na het uitvoeren van de opdracht sed

Een variabele gebruiken als zoekwaarden en vervangingen

Met een beetje interpolatie kunnen variabelen worden gebruikt om strings te vervangen. Het eerste argument sed moet in dit geval dubbele aanhalingstekens gebruiken in plaats van enkele aanhalingstekens. Uw code zal bijvoorbeeld vergelijkbaar zijn met die hieronder:

tuts()  local search=$1 local Replace=$2 # Let op de dubbele aanhalingstekens sed -i "s/$search/$replace/g" singleboardbytes.tekst 

Een variabele gebruiken als zoekwaarden en vervangingen

sed heeft twee smaken, namelijk: de GratisBSD en de Linux sed. De Linux-distributies gebruiken de Linux-sed terwijl OS X-gebruikers de FreeBSD-sed gebruiken. Deze smaken zijn behoorlijk verschillend, en daarom kan men geen commando's van de ene sed-smaak naar de andere overbrengen.

Als u bijvoorbeeld de inhoud van het bestand vervangt met FreeBSD, moet er een back-up worden gemaakt met behulp van de .bak extensie. Of u kunt een back-up starten met het gebruik van lege paren aanhalingstekens direct na de -i-notatie, zoals weergegeven in de bash-syntaxis hieronder:

tuts()  lokaal zoeken=$1 lokaal vervangen=$2 sed -i "" "s/$search/$replace/g" singleboardbytes.tekst 

Als er geen back-up wordt gemaakt terwijl u FreeBSD gebruikt, zoals geïllustreerd in de syntaxiscode hierboven, krijgt u een fout zoals hieronder weergegeven:

sed: 1: "/Users/user/path/tuts… ": extra tekens aan het einde van het h-commando

Hoe een bestand te vervangen en het cijferpatroon te matchen met de opdracht sed

Als u het script met succes uitvoert, wordt er gezocht naar alle numerieke inhoud die in een bestand aanwezig is. Dan wordt de inhoud vervangen door $ voor de cijfers toe te voegen.

#!/bin/bash # Controleer of de argumentwaarde van de opdrachtregel bestaat of niet als [ $1 != "" ]; dan # Doorzoek alle tekenreeksen die cijfers bevatten en voeg $ sed -i 's/\b[0-9]\5\\b/$&/g' $1 fi toe

Een string vervangen met het awk-commando

In dit geval zullen we het awk-commando gebruiken in plaats van het sed-commando om de inhoud van een bestand te vervangen. Het verschil tussen deze opdrachten is dat de opdracht sed het originele bestand direct bijwerkt, wat niet het geval is met de opdracht awk.

#!/bin/bash # Controleer of de argumentwaarde van de opdrachtregel bestaat of niet als [ $1 != "" ]; dan # Zoek alle tekenreeksen op basis van datum awk 'sub("02/06/2020","12/06/2020")1' $1 > tijdelijk.txt && mv temp.txt $1 fi

Conclusie

De bovenstaande voorbeelden zijn van vitaal belang voor uw voortgang bij het leren vervangen van een string in Bash. Daarom, om er goed in te worden, moet je regelmatig oefenen. Het zoeken en vervangen van tekenreeksen in een bestand lijkt misschien ingewikkeld, maar u zult merken dat het veel beter beheersbaar is als u onze richtlijnen correct volgt.

Een punt om op te merken is dat het uitvoeren van de opdrachten soms beter beheersbaar lijkt, maar je moet oppassen dat je geen schade aanricht aan sed. Wanneer u de verkeerde opdrachten invoert, maakt u uw computer kapot, waardoor u meer problemen krijgt, zoals gegevensverlies. Kopieer en plak daarom voor de zekerheid altijd de code zoals deze is in uw terminal. Dit voorkomt spelfouten die uw machine kunnen beschadigen. We hopen dat dit artikel je heeft geholpen om te leren hoe je een string in bash kunt vervangen met behulp van dit artikel.

Beste gameconsole-emulators voor Linux
Dit artikel bevat een lijst van populaire emulatiesoftware voor gameconsoles die beschikbaar is voor Linux. Emulatie is een softwarecompatibiliteitsla...
Beste Linux-distributies voor gaming in 2021
Het Linux-besturingssysteem heeft een lange weg afgelegd van zijn oorspronkelijke, eenvoudige, servergebaseerde uiterlijk. Dit besturingssysteem is de...
Hoe u uw gamesessie op Linux kunt vastleggen en streamen
In het verleden werd het spelen van games alleen als een hobby beschouwd, maar met de tijd zag de game-industrie een enorme groei in termen van techno...