Versterk je opdrachtregelvaardigheden met deze voorbeelden van sed

Heb je gezocht naar een andere manier om bewerkingen uit te voeren op teksten? Zoek niet verder! Deze tutorial heeft alles wat je nodig hebt met voorbeelden van stream editor sed.

Kortom, sed stelt je in staat om een breed scala aan bewerkingen uit te voeren op bestanden en tekststreams op een niet-interactieve manier. Je neemt de bewerkingsbeslissingen terwijl je de opdrachten uitvoert. En in deze tutorial leer je hoe je sed-opdrachten gebruikt en je workflow effectief stroomlijnt.

Lees verder en verbeter je vaardigheden op de commandoregel!

Vereisten

Zorg ervoor dat je het volgende hebt om mee te doen met de praktische demonstratie in deze tutorial:

  • A command line interface (e.g., Terminal on macOS or Linux) – This tutorial uses Ubuntu Linux 20.04, but the commands should work on most popular operating systems.
  • A text editor (e.g., nano, vi, or Sublime Text) – This tutorial uses Nano.

sed installeren op Ubuntu

sed is over het algemeen opgenomen als een standaard hulpprogramma in de meeste op Unix lijkende besturingssystemen, inclusief Linux en macOS. Maar hoe dan ook, het controleren of je al sed op je systeem hebt geïnstalleerd, is oké en is een basisprocedure voordat je teksttransformaties uitvoert.

1. Open je terminal en voer de onderstaande sed opdracht uit om te controleren welke versie van sed op je systeem is geïnstalleerd.

sed --version

Als sed is geïnstalleerd, zie je het sed-versienummer en wat informatie over de build, zoals hieronder weergegeven.

Verifying sed’s installed version

Anders krijg je het onderstaande foutbericht te zien als sed niet is geïnstalleerd.

Dit foutbericht geeft aan dat het sed-commando niet is gevonden in de PATH-omgevingsvariabele van je systeem.

Getting an error running sed commands

2. Voer vervolgens het [apt-get update onderstaande commando uit om sed te updaten en installeren op je systeem.

Dit commando haalt de nieuwste pakketinformatie op van de geconfigureerde pakketbronnen, inclusief de afhankelijkheden, bestanden en scripts van het pakket. Het uitvoeren van dit commando is noodzakelijk om ervoor te zorgen dat je de nieuwste versie van sed en eventuele andere benodigde pakketten installeert.

sudo apt-get update -y && sudo apt-get install sed -y
Installing sed on the operating system

3. Voer tot slot het volgende commando uit om te controleren of het sed-commando is geïnstalleerd op je systeem.

Dit commando print het volledige pad naar het sed-uitvoerbaar bestand, dat in dit voorbeeld /usr/bin/sed is.

Zodra je sed hebt geïnstalleerd en hebt geverifieerd dat het in je PATH staat, kun je het sed-commando gebruiken om verschillende teksttransformaties en manipulaties uit te voeren.

which sed
Verifying that the sed command is installed

Strings vervangen in een tekstbestand

Sed is een populaire streameditor die beschikbaar is op de meeste Unix-achtige besturingssystemen, en een van de meest handige functies van sed is het vervangen van strings in een tekstbestand.

Hieronder volgen enkele scenario’s, maar niet beperkt tot, waar het vervangen van strings nuttig is:

  • Het bijwerken van een lijst met URL’s om een nieuwe domeinnaam weer te geven.
  • Het wijzigen van product-ID’s in een database of CSV-bestand.
  • Gegevens formatteren voor import in een ander systeem en nog veel meer.

De basis syntaxis voor het gebruik van sed is als volgt waar:

Placeholder Function
command Controls sed’s behavior.
options Allows you to customize the behavior of the sed command
input_file Specifies the file or text stream that you want to edit. Typically, you can specify a single file or stream, but concatenating multiple files or streams by redirection also works.
output_file Specifies the file that contains the results of your sed command. The file can be new or the same as input_file, depending on how you use sed.
sed command options input_file | output_file

Stel dat u een tekstbestand heeft genaamd urls.txt dat een lijst met URL’s bevat en u alle URL’s wilt bijwerken om een nieuwe domeinnaam te gebruiken.

1. Voer de onderstaande echo commando’s uit om het bestand urls.txt te maken in de huidige directory. Deze commando’s geven geen uitvoer, maar schrijven gespecificeerde teksten naar het bestand.

echo "http://old-domain.com/page1" > urls.txt && echo "http://old-domain.com/page2" >> urls.txt && echo "http://old-domain.com/page3" >> urls.txt

2. Voer vervolgens het cat commando uit om de inhoud van het urls.txt bestand te bekijken. cat urls.txt

cat urls.txt

De uitvoer hieronder bevestigt de drie oude URL’s die zijn geschreven in het urls.txt bestand.

Viewing the contents of the urls.txt file

3. Voer nu het onderstaande commando uit om alle voorkomens van de tekenreeks oude-domein.com te vinden en te vervangen (s) door nieuw-domein.com in het urls.txt bestand.

sed 's/old-domain.com/new-domain.com/' urls.txt

U zult zien dat de URL’s in uw invoerbestand zijn bijgewerkt met het nieuwe domein, zoals getoond.

Replacing a string in a text file

Het vervangen van de Nde voorkomens van een tekenreeks

Naast de basis zoek-en-vervang functionaliteit heeft sed extra ingebouwde commando’s waarmee u meer complexe teksttransformaties kunt uitvoeren. Een dergelijk geval is het vervangen van het n-de voorkomen van de patroontekenreeks in een enkele regel tekst.

Bijvoorbeeld, u wilt het tweede veld in een CSV-bestand bijwerken met een nieuwe waarde of het derde voorkomen van een tekenreeks in een database dump bijwerken.

De basis syntaxis voor deze opdracht is als volgt waarbij:

  • patroon – de te vervangen string is.
  • vervanging – de string die gebruikt wordt als vervanging.
  • n – is the nth occurrence of the string to replace (e.g., 1=first occurrence, 2=second occurrence…).
sed 's/pattern/replacement/n' input_file

Om te zien hoe je het n-de voorkomen van een string vervangt, volg deze stappen:

Voer de volgende echo opdracht uit om een regel tekst te maken met drie voorkomens van het patroon snel. Vervolgens vervangt de sed opdracht (s) het tweede voorkomen (2) van het patroon snel door de string snel.

echo "The quick and quick and quick brown fox jumps over the lazy dog" | sed 's/quick/fast/2'

Zoals je hieronder kunt zien, is alleen het tweede voorkomen van het patroon snel vervangen door de string snel, terwijl alle andere voorkomens onveranderd blijven.

De nth opdracht is standaard hoofdlettergevoelig. Als gevolg daarvan zoekt de opdracht alleen naar de exacte overeenkomst van het patroon. Om geen rekening te houden met de letterhoofdletters van het patroon, ga naar de volgende stap.

Replacing the nth occurrence of a string

? Merk op dat de nth opdracht voorkomens van het patroon telt van links naar rechts. Bovendien werkt de nth opdracht alleen op één regel tekst. Om een vervanging uit te voeren op meerdere regels, gebruik een andere methode die wordt gedemonstreerd in de volgende sectie.

Voer vervolgens de onderstaande opdracht uit om het tweede (2) voorkomen van het snel patroon te vervangen door snel, terwijl je de hoofdletters negeert (i).

De i optie is handig bij het werken met tekst met inconsistente hoofdletters.

echo "The Quick and QuiCk and Quick brown fox jumps over the lazy dog" | sed 's/quick/fast/2i'

In de uitvoer hieronder wordt het tweede voorkomen van het woord snel (QuiCk) succesvol vervangen door de string snel – ongeacht de letterhoofdletter.

Replacing the nth occurrence of a string while ignoring the letter case

Het vervangen van alle voorkomens van een overeenkomend patroon/tekenreeks

In plaats van het vervangen van het nth voorkomen van een tekenreeks, plan je misschien alle voorkomens ervan te vervangen. Dit helpt aanzienlijk bij je plan om elk voorkomen van een auteursrechtelijke tekenreeks te massaal bij te werken met het huidige jaar, bijvoorbeeld.

1. Maak een bestand genaamd input.txt met de volgende inhoud in uw voorkeursteksteditor.

This is a quick test.
The quick brown fox jumps over the lazy dog.
Quick, you need to finish this task before it gets too late.

2. Voer vervolgens de volgende opdracht uit om (s) alle voorkomens van het woord snel te vervangen door snel uit het bestand input.txt. Zodra vervangen, worden de wijzigingen geschreven naar het bestand output.txt.

sed 's/quick/fast/g' input.txt > output.txt

3. Voer nu de onderstaande opdracht uit om de inhoud van het bestand output.txt te bekijken en te verifiëren of de vervanging is uitgevoerd.

cat output.txt

U zult zien dat alle voorkomens van het woord snel zijn vervangen door snel, zoals hieronder getoond. Net als de nth opdracht, is de g opdracht hoofdlettergevoelig en vervangt alleen de exacte overeenkomsten.

De tekenreeks Quick wordt niet vervangen, zoals hieronder getoond, maar u kunt de i optie gebruiken om hoofdletterongevoelige substituties uit te voeren.

Replacing All the Occurrences of a Matching Pattern/String

Het vervangen van een overeenkomend patroon tekenreeks op een specifieke regel

Misschien weet je al op welke regel van de string je wilt vervangen ligt. Waarom alle voorkomens vervangen als je specifieke regels kunt vervangen? Deze functie is handig bij het maken van wijzigingen in een bepaalde regel in een bestand of stream, maar laat de andere regels onaangeroerd.

Hieronder staat de syntax voor het vervangen van een string vanaf een specifieke regel, waarbij n het regelnummer vertegenwoordigt.

sed 'n s/pattern/replacement/' input_file output_file

1. Maak een bestand genaamd myfile.txt met de volgende inhoud.

test1
test2
test3

2. Voer vervolgens de onderstaande sed-opdracht uit om het volgende uit te voeren:

  • Zoek het woord test2 vanaf de tweede regel (2) van het bestand myfile.txt. Vervang (s) het woord test2 door test2_changed. Schrijf de wijzigingen (>) naar een nieuw bestand genaamd myfile_changed.txt.

This command does not provide output to the terminal since the changes are written to a new file. But you will verify the changes in the following step.

sed '2 s/test2/test2_changed/' myfile.txt > myfile_changed.txt

3. Voer tot slot de onderstaande cat-opdracht uit om de inhoud van het bestand myfile_changed.txt te bekijken.

cat myfile_changed.txt

Zoals je hieronder kunt zien, is de tweede regel van het bestand myfile.txt vervangen door test2_changed, terwijl alle andere regels ongewijzigd blijven.

Verifying the changed string on a specific line

Exclusief uitvoer van gewijzigde regels van strings

In plaats van de volledige inhoud van een bestand af te drukken na het aanbrengen van wijzigingen, wilt u mogelijk alleen de gewijzigde regels afdrukken. Hoe? Door de p-vlag samen met de -n-optie te gebruiken.

Hieronder staat de syntax voor het exclusief afdrukken van gewijzigde regels van strings waar:

  • De -n-optie vertelt sed om het standaardgedrag van het afdrukken van elke regel te onderdrukken.
  • De p vlag vertelt sed om de uitvoer van het commando af te drukken.
sed -n 's/pattern/replacement/p' input_file output_file

Open uw myfile.txt bestand en vervang de inhoud door het volgende. Let op dat de tweede regel onjuist is omdat het woord first in plaats daarvan second zou moeten zijn.

This is the first line of my file.
This is the first line of my file.
This is the third line of my file.

Voer nu het onderstaande sed commando uit om de string first te vervangen door second in de tweede regel (2) van het bestand myfile.txt, maar geef alleen de gewijzigde regels weer (p).

sed -n '2 s/first/second/p' myfile.txt

U ziet alleen de uitvoer van de gewijzigde tweede regel op uw terminal, zoals hieronder weergegeven.

Outputting changed lines exclusively

Conclusie

In deze zelfstudie hebt u verschillende voorbeelden van het gebruik van sed gebruikt om zoek-en-vervang bewerkingen uit te voeren. Bovendien hebt u meer geavanceerde technieken aangeraakt, zoals het vervangen van specifieke voorkomens en het alleen uitvoeren van de gewijzigde regels.

sed is een krachtige opdrachtregeltool waarmee u verschillende tekstmanipulatietaken kunt uitvoeren. Of het nu gaat om globale vervangingen over een heel bestand of gerichte vervangingen op specifieke regels, sed zal het lukken.

Waarom niet meer ontdekken over reguliere expressies? Reguliere expressies zijn essentieel voor veel tekstmanipulatietools, waaronder sed. Deze expressies besparen tijd en verminderen de inspanningen die worden geleverd. Wanneer? Terwijl u complexe zoek- en vervangbewerkingen uitvoert op grote hoeveelheden tekst.

Source:
https://adamtheautomator.com/sed-examples/