31+ Voorbeelden voor sed Linux Command in Tekstmanipulatie

In het vorige bericht hebben we het gehad over bash-functies en hoe je die direct vanaf de opdrachtregel kunt gebruiken, en we hebben nog wat andere coole dingen gezien. Vandaag gaan we het hebben over een handige tool voor het manipuleren van tekenreeksen, genaamd sed of sed Linux command.

We gebruiken sed om met tekstbestanden te werken, zoals logbestanden, configuratiebestanden en andere tekstbestanden.

In dit bericht gaan we ons richten op het sed Linux commando, dat wordt gebruikt voor het manipuleren van tekst, wat een essentiële stap is in onze bash scripting reis.

Linux-systeem biedt een aantal hulpmiddelen voor tekstverwerking; een van die hulpmiddelen is sed.

We zullen de 31+ voorbeelden bespreken met afbeeldingen om de uitvoer van elk voorbeeld te laten zien.

Tabel van de inhoud

Sed Linux-commando begrijpen

Het sed-commando is een niet-interactieve teksteditor. Sed Linux commando bewerkt gegevens op basis van de regels die je opgeeft; je kunt het als volgt gebruiken:

$ sed options file

Je bent niet beperkt tot het gebruik van sed om bestanden te manipuleren; je past het direct toe op de STDIN zoals dit:

$ echo "Welcome to LikeGeeks page" | sed 's/page/website/'

sed Linux commando

Het s commando vervangt de eerste tekst door het tweede tekstpatroon. In dit geval hebben we de string “website” vervangen door het woord “pagina”.

Het bovenstaande voorbeeld was een eenvoudig voorbeeld om de tool te demonstreren. We kunnen het Linux commando sed ook gebruiken om bestanden te manipuleren.

Laten we een voorbeeldbestand maken :

sed manipulate file

$ sed 's/test/another test/' ./myfile

De resultaten worden onmiddellijk op het scherm afgedrukt; u hoeft niet te wachten tot het bestand tot het einde is verwerkt.

Als uw bestand groot genoeg is, ziet u het resultaat al voordat de verwerking klaar is.

Sed Linux commando werkt uw gegevens niet bij. Het stuurt alleen de gewijzigde tekst naar STDOUT. Het bestand blijft onaangeroerd. Als je de bestaande inhoud moet overschrijven, kun je onze vorige post bekijken, die ging over redirections.

Meerdere sed Linux commando’s gebruiken op de commandoregel

Om meerdere sed commando’s uit te voeren, kunt u de -e optie als volgt gebruiken:

$ sed -e 's/This/That/; s/test/another test/' ./myfile

sed meerdere commando's

U moet de sed commando’s scheiden door een puntkomma zonder spaties.

Ook kunt u een enkel aanhalingsteken gebruiken om commando’s van elkaar te scheiden:

$ sed -e '> s/This/That/> s/test/another test/' myfile

sed separate commands

Hetzelfde resultaat, geen probleem.

Commando’s uit een bestand lezen

Je kunt je sed commando’s in een bestand opslaan en gebruiken door het bestand op te geven met de -f optie.

$ cat mycommandss/This/That/s/test/another test/
$ sed -f mycommands myfile

lees commando's uit bestand

Vlaggen substitueren

Kijk eens goed naar het volgende voorbeeld:

$ cat myfile
$ sed 's/test/another test/' myfile

sed substitute flag

Het bovenstaande resultaat laat zien dat we het eerste voorkomen in elke regel hebben vervangen. Om alle occurrences van een patroon te vervangen, gebruik je een van de volgende substitutievlaggen.

We kunnen de vlaggen als volgt schrijven:

s/pattern/replacement/flags

Er zijn vier soorten substituties:

  • g, vervangt alle occurrences.
  • Een getal, het occurrence-nummer voor de nieuwe tekst die je wilt vervangen.
  • p, drukt de oorspronkelijke inhoud af.
  • w bestand: betekent schrijf de resultaten naar een bestand.

U kunt de vervanging beperken door het occurrence-nummer op te geven dat als volgt moet worden vervangen:

$ sed 's/test/another test/2' myfile

sed number flag

Zoals u kunt zien, hebben we alleen het tweede occurrence op elke regel vervangen.

De vlag g betekent globaal, wat een globale vervanging betekent voor alle voorkomens:

$ sed 's/test/another test/g' myfile

sed globale vlag

De vlag p drukt elke regel af die een patroonovereenkomst bevat, u kunt de optie -n gebruiken om alleen de gewijzigde regels af te drukken.

$ cat myfile
$ sed -n 's/test/another test/p' myfile

sed supress lines

De vlag w slaat de uitvoer op in een opgegeven bestand:

$ sed 's/test/another test/w output' myfile

send output to file

We hebben de uitvoer op het scherm afgedrukt, maar we hebben de overeenkomende regels in het uitvoerbestand opgeslagen.

Tekens vervangen

Voorstel dat u wilt zoeken naar bash shell en deze wilt vervangen door csh shell in het /etc/passwd bestand met behulp van sed, wel, u kunt het gemakkelijk doen:

$ sed 's/\/bin\/bash/\/bin\/csh/' /etc/passwd

Oh!! dat ziet er verschrikkelijk uit.

Gelukkig is er nog een andere manier om dat te bereiken. Je kunt het uitroepteken (!) als string scheidingsteken gebruiken zoals dit:

$ sed 's!/bin/bash!/bin/csh!' /etc/passwd

Nu is het makkelijker te lezen.

Sed commando beperken

Sed commando verwerkt je hele bestand. U kunt het sed commando echter beperken om specifieke regels te verwerken; er zijn twee manieren:

  • Een reeks regels.
  • Een patroon dat overeenkomt met een specifieke regel.

U kunt een getal typen om het tot een specifieke regel te beperken:

$ sed '2s/test/another test/' myfile

sed restricted

We hebben alleen regel twee gewijzigd.

Wat dacht je van het gebruik van een reeks regels:

$ sed '2,3s/test/another test/' myfile

vervang reeks regels

Ook kunnen we beginnen bij een regel aan het einde van het bestand:

$ sed '2,$s/test/another test/' myfile

sed replace to the end

Of u kunt een patroon als dit gebruiken:

$ sed '/likegeeks/s/bash/csh/' /etc/passwd

sed pattern match

Geweldig!!

U kunt reguliere expressies gebruiken om dit patroon generieker en bruikbaarder te maken.

Regels verwijderen

Om regels te verwijderen met sed, kunt u de delete (d) vlag gebruiken is uw vriend.

De vlag delete verwijdert de tekst uit de stream, niet het oorspronkelijke bestand.

$ sed '2d' myfile

sed delete line

Hier verwijderen we alleen de tweede regel uit myfile.

Hoe zit het met het verwijderen van een reeks regels?

$ sed '2,3d' myfile

verwijder meerdere regels

Hier verwijderen we een reeks regels, de tweede en de derde.

Een ander type bereik:

$ sed '3,$d' myfile

verwijder tot het einde

Hier verwijderen we vanaf de derde regel tot het einde van het bestand.

Al deze voorbeelden wijzigen nooit het oorspronkelijke bestand.

$ sed '/test 1/d' myfile

delete pattern match

Hier gebruiken we een patroon om de regel te verwijderen als deze op de eerste regel overeenkomt.

Als u een reeks regels wilt verwijderen, kunt u twee tekstpatronen als volgt gebruiken:

$ sed '/second/,/fourth/d' myfile

verwijder reeks regels

Wij hebben van de tweede tot en met de vierde regel verwijderd.

Tekst invoegen en toevoegen

U kunt tekstregels invoegen of toevoegen met behulp van de volgende vlaggen:

  • De (i)-vlag.
  • De (a)-vlag.
$ echo "Another test" | sed 'i\First test '

sed tekst invoegen

We hebben de tekst vóór de opgegeven regel ingevoegd.

$ echo "Another test" | sed 'a\First test '

sed append

We hebben de tekst na de opgegeven regel toegevoegd.

Wat dacht u van tekst in het midden toevoegen?

Eenvoudig, kijk naar het volgende voorbeeld:

$ sed '2i\This is the inserted line.' myfile

sed insert line

En het append werkt op dezelfde manier, maar kijk naar de positie van de geapplende tekst:

$ sed '2a\This is the appended line.' myfile

sed append line

We hebben dezelfde vlaggen gebruikt, maar met een locatie van invoegen of appen.

Regels wijzigen

Om een specifieke regel te wijzigen, kunt u de vlag (c) als volgt gebruiken:

$ sed '3c\This is a modified line.' myfile

sed wijzig regel

U kunt een regelmatig expressiepatroon gebruiken, en alle regels die met dat patroon overeenkomen, worden gewijzigd.

$ sed '/This is/c Line updated.' myfile

sed pattern match

Transformeer tekens

De transformeervlag (y) werkt op tekens als deze:

$ sed 'y/123/567/' myfile

sed transform character

We hebben de transformatie op alle gegevens toegepast, en we kunnen deze niet beperken tot een specifieke occurrence.

Regelnummers afdrukken

U kunt het regelnummer afdrukken met het (=)-teken, zoals hieronder:

$ sed '=' myfile

sed regelnummers

Maar door -n te gebruiken in combinatie met het gelijkheidsteken, geeft het sed-commando het regelnummer weer dat overeenkomende tekens bevat.

$ sed -n '/test/=' myfile

hide lines

Leest gegevens uit een bestand

U kunt de vlag (r) gebruiken om gegevens uit een bestand te lezen.

U kunt een regelnummer of een tekstpatroon definiëren voor de tekst die u wilt lezen.

$ cat newfile
$ sed '3r newfile' myfile

lees gegevens uit bestand

We hebben de inhoud zoals verwacht na de derde regel ingevoegd.

En dit is met behulp van een tekstpatroon:

$ sed '/test/r newfile' myfile

read match pattern

Cool toch?

Nuttige voorbeelden

Voorstel dat we een bestand hebben dat tekst bevat met een plaatshouder, en we hebben een ander bestand dat de gegevens bevat waarmee de plaatshouder in het andere bestand wordt gevuld.

We gebruiken de (r) en (d) vlaggen om de klus te klaren.

Het woord DATA in dat bestand is een plaatshouder voor een echte inhoud die we zullen opslaan in een ander bestand met de naam data.

We zullen het vervangen door de echte inhoud:

$ Sed '/DATA>/ {r newfiled}' myfile

repalce placeholder

Geweldig!!! zoals je kunt zien, hebben we de placeholder locatie gevuld met de data uit het andere bestand.

Dit is slechts een kleine introductie over het sed commando. Het sed Linux commando is een andere wereld op zich.

De enige beperking is je verbeelding.

Ik hoop dat je het makkelijk vindt om strings te manipuleren met het sed Linux commando.

Dank u.

Oprichter van LikeGeeks. Ik werk sinds 2010 als Linux-systeembeheerder. Ik ben verantwoordelijk voor het onderhouden, beveiligen en oplossen van problemen met Linux-servers voor meerdere klanten over de hele wereld. Ik schrijf graag shell- en Python-scripts om mijn werk te automatiseren.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *