Hoe de Linux sed-command te gebruiken in 2024 met nuttige voorbeelden + gratis Linux cheatsheet
De Linux sed command laat je toe om regels in een bestand te zoeken, vervangen, invoegen en verwijderen zonder het bestand te openen met een teksteditor. Geschikt voor gepipeteerde invoer en verschillende bestandsformaten, maakt deze Linux-command ook gebruik van reguliere expressies (regex), waarmee je complexe patronen kunt zoeken en manipuleren.
Met de verschillende toepassingsmogelijkheden kan het begrijpen van hoe je sed gebruikt systeembeheerders helpen om hun virtuele privéservers (VPS) efficiënt te beheren.
Dit artikel legt de algemene syntaxis van de Linux sed command uit, evenals de opties en subcommando’s. Je zult ook verschillende sed voorbeelden en gebruikstoepassingen leren voor het beheren van Linux VPS.
Sed command opties
Hier is de algemene syntaxis van de sed-command:
sed options 'script' file_name
Om het gedrag van de sed-commands aan te passen, voeg je de volgende command regelopties toe:
- –help – toont informatie over het gebruik van de command.
- –debug – stelt de Terminal in staat om de uitvoering van het programma en de invoer te annoteren.
- -i – overschrijft het originele bestand.
- -n – schakelt automatische afdrukken uit, tenzij de gebruiker de p-command gebruikt.
- -u – minimaliseert de uitvoer.
- –posix – schakelt POSIX-gedragingen van sed uit om het schrijven van draagbare scripts te vereenvoudigen.
- -e – specificeert meerdere commands die achtereenvolgens moeten worden uitgevoerd.
- -b – opent invoerbestanden in binaire modus.
- -l – stelt de gewenste regelomslaglengte in voor de l-command.
Het script bevat het subcommando, zoekpatroon, vervangende tekenreeks en flag. Deze elementen worden tussen aanhalingstekens geplaatst en gescheiden met een scheidingsteken, zoals een schuine streep (/), omgekeerde schuine streep () of pijp (|).
De volgorde van deze elementen kan variëren, afhankelijk van het subcommando. Bijvoorbeeld, de s of vervangingscommand vervangt een regulier expressiepatroon door een andere tekenreeks. De syntaxis ziet er als volgt uit:
's/regex_pattern/new_pattern/flags'
Om de patroonvervanging aan te passen, gebruik je de volgende flags:
- g – past een globale vervanging toe, niet alleen de eerste keer dat het patroon voorkomt.
- Number – specificeert welke regel(s) gewijzigd moeten worden.
- p – print de nieuwe regel na een succesvolle patroonvervanging.
- i – maakt de vervanging hoofdlettergevoelig.
Tip van een expertp
De s subcommand ondersteunt meerdere flags. Bijvoorbeeld, voeg de gi flag toe om een globale, hoofdlettergevoelige vervanging mogelijk te maken.
Hoe sed installeren?
Het Linux stream editor-pakket wordt vooraf geïnstalleerd in de meeste distributies. Als je systeem het hulpprogramma niet heeft, volg dan de onderstaande stappen om het te installeren:
Belangrijk! In deze handleiding draait onze VPS op Ubuntu 22.04. Als je een andere distributie of versie gebruikt, kunnen de commands verschillen.
- Maak verbinding met je VPS via een SSH-client zoals PuTTY of Terminal. Hostinger-gebruikers kunnen de browserterminal via hPanel gebruiken.
- Voer je root inloggegevens in. Op hPanel bevinden ze zich in het tabblad SSH-toegang in het VPS-overzichtmenu.
- Werk de repository bij door deze command in te voeren:
sudo apt-get update
- Installeer het sed-pakket door de volgende command in te voeren:
sudo apt-get install sed
- Voer de onderstaande command uit om te controleren of de installatie succesvol was:
sed --version
sed Command voorbeelden
In de volgende secties presenteren we 10 voorbeelden van stream editor-commands om je te helpen de functies ervan beter te begrijpen.
Belangrijk! Alle onderstaande commands wijzigen het oorspronkelijke bestand niet. Om de wijzigingen direct toe te passen, voeg je de -i optie toe.
Sed gebruiken om een string te zoeken en te vervangen
De sed command wordt vaak gebruikt voor het vervangen van tekst. Dit hulpprogramma zoekt naar het opgegeven patroon in een bestand en vervangt het door de gewenste string.
Om dit te doen, gebruik je de s command met de string die je wilt vervangen en de vervangende string. Hier is de syntaxis:
sed 's/old_string/new_string/' samplefile.txt
Vervang de tijdelijke aanduidingen door de werkelijke waarden. Bijvoorbeeld, deze command vervangt het woord “images” door “photos” in het bestand scenery.txt:
sed 's/images/photos/' scenery.txt
Als je string het schuine streep-symbool bevat, gebruik dan een andere scheidingsteken, zoals een backslash () of een pipe (|).
Gebruik van sed om de nth voorkomst van een patroon in een regel te vervangen
Als een patroon meerdere keren voorkomt in een regel, kun je de volgende command-syntaxis gebruiken om een specifieke voorkomst te vervangen:
sed 's/old_string/new_string/#' samplefile.txt
Vervang het #-symbool door het volgnummer van de patroonvoorkomst. Bijvoorbeeld, deze command vervangt de eerste voorkomst van het woord “music” door “song” in een regel in het bestand playlist.txt:
sed 's/music/song/1' playlist.txt
Gebruik van sed om de nth-voorkomsten van een patroon in een regel te vervangen
Standaard vervangt de sed-command alleen de eerste instantie van de opgegeven string en gaat daarna naar de volgende invoerregel. Om alle overeenkomende patronen in dezelfde regel te vervangen, voeg je de g flag toe. De sed-command ziet er als volgt uit:
sed 's/old_string/new_string/g' samplefile.txt
Bijvoorbeeld, voer de volgende command uit om alle voorkomsten van “eagle” te vervangen door “falcon” in een regel binnen animals.txt:
sed 's/eagle/falcon/g' animals.txt
Gebruik van sed om een voorkomst van de nth tot alle voorkomsten in een regel te vervangen
In plaats van alle patronen binnen dezelfde regel te vervangen, kun je het getal en de g flag combineren om voorkomsten te vervangen, te beginnen vanaf een specifiek patroon. De sed-command ziet er als volgt uit:
sed 's/old_string/new_string/#g' samplefile.txt
Bijvoorbeeld, de onderstaande command vervangt het woord “pisces” door “aquarius” vanaf de tweede voorkomst tot de laatste in het bestand astrology.txt:
sed 's/pisces/aquarius/2g' astrology.txt
Gebruik van sed om het eerste teken van elk woord tussen haakjes te plaatsen
Om de eerste letter van elk woord in haakjes af te drukken, gebruik je de volgende command:
echo "desired_sentence" | sed -E 's/(\b\w)/(\1)/g'
Bijvoorbeeld, om het eerste teken van “An example of the sed command” in haakjes weer te geven, voer je het volgende uit:
echo "An example of the sed command" | sed -E 's/(\b\w)/(\1)/g'
Om het eerste teken van elk woord in een bestand tussen haakjes te plaatsen, laat je de echo command weg en voeg je het invoerbestand aan het einde toe.
Gebruik van sed om de string op een specifiek regelnummer te vervangen
Om de string op een specifieke regel (nth regel) te vervangen, voeg je het volgnummer van die regel toe vóór de s in de command, zoals in de volgende syntaxis:
sed '#s/old_string/new_string/' samplefile.txt
Bijvoorbeeld, voer de volgende command uit om het woord “cake” te vervangen door “bread” in de tweede regel van foods.txt:
sed '2s/cake/bread/' foods.txt
Gebruik van sed om de vervangen regel te dupliceren met de /p-flag
Om de regels die je met de sed-command hebt gewijzigd als extra uitvoer af te drukken, gebruik je de p of print-flag. Hier is de algemene syntaxis:
sed 's/old_string/new_string/p' samplefile.txt
Bijvoorbeeld, voer de volgende command uit om “phones” te vervangen door “tablets” in het gadgets.txt bestand en de resultaten af te drukken:
sed 's/phones/tablets/p' gadgets.txt
De terminal zal de oorspronkelijke string afdrukken als de regel de zoekpatroon niet bevat en dus niet wordt vervangen.
Gebruik van sed om de string in een bereik van regels te vervangen
De sed-command laat je alleen de opgegeven regel nummers in het script wijzigen door een bereik toe te voegen. Hier is de syntaxis:
sed '#,# s/old_string/new_string/' samplefile.txt
Bijvoorbeeld, de onderstaande command vervangt “germany” op de derde, vierde en vijfde regel in het countries.txt bestand door “france”:
sed '3,5 s/germany/france/' countries.txt
Gebruik van sed om alleen de gewijzigde regels af te drukken
Standaard drukt de stream editor de inhoud van het hele bestand af. Om de uitvoer te vereenvoudigen, combineer je de -n optie met de p command om alleen de bijbehorende regels weer te geven. Hier is de algemene syntaxis:
sed -n 's/old_string/new_string/p' samplefile.txt
Bijvoorbeeld, om de derde instantie van “green” te vervangen door “blue” in een regel in het colors.txt bestand en de gewijzigde regels in het terminalvenster af te drukken, voer je het volgende in:
sed -n 's/green/blue/3p' colors.txt
Gebruik van sed om lijnen uit een specifiek bestand te verwijderen
De d of delete command laat je lijnen uit een bestand verwijderen zonder een teksteditor. Bijvoorbeeld, gebruik de volgende syntaxis om een specifieke regel te verwijderen:
sed '#d' samplefile.txt
Vervang het # symbool door het regelnummer dat je wilt verwijderen. Bijvoorbeeld, voer deze command in om de eerste regel uit het cities.txt bestand te verwijderen:
sed '1d' cities.txt
Daarnaast kun je alle lijnen binnen een specifiek bereik verwijderen met de sed command:
sed '#,#d' samplefile.txt
Vervang de # symbolen door het start- en eindregelnummer. Bijvoorbeeld, voer het volgende in om de eerste tot de derde regel in het cars.txt bestand te verwijderen:
sed '1,3d' cars.txt
Je kunt ook de laatste regel in een bestand verwijderen door de d subcommand te combineren met een dollarteken ($), zoals het volgende:
sed '$d' samplefile.txt
Om een specifiek regelnummer vanaf de laatste regel te verwijderen, gebruik je de volgende syntaxis:
sed '#,$d' samplefile.txt
Bijvoorbeeld, deze command verwijdert de op één na laatste regel in het books.txt bestand:
sed '2,$d' books.txt
Naast het verwijderen van regels, kun je deze command gebruiken om een specifiek patroon uit een bestand te verwijderen. Dit doe je door het regex-patroon in je script op te nemen, zoals de volgende syntaxis:
sed '/pattern/d' samplefile.txt
Bijvoorbeeld, voer deze command in om het “oabo” patroon uit het filestrings.txt bestand te verwijderen:
sed '/oabo/d' filestrings.txt
sed Command gebruiksvoorbeelden
In dit gedeelte leggen we uit hoe je sed-commands kunt gebruiken voor verschillende use cases in serverbeheer.
Gebruik sed voor batchverwerking van bestanden
Er zijn over het algemeen twee manieren om bestanden in bulk te bewerken met de sed-command.
Ten eerste kun je de bestanden afzonderlijk specificeren. Bij deze methode vermeld je alle invoerbestanden die je wilt vervangen aan het einde van je command, gescheiden door spaties. Hier is de syntaxis:
sed 's/old_string/new_string/g' filename1.txt filename2.txt
De command zal tegelijkertijd alle voorkomens van old_string in de twee tekstbestanden zoeken en vervangen.
Ten tweede kun je de bestanden scannen met behulp van de find-command. Deze methode zoekt automatisch naar bestanden die het opgegeven patroon bevatten in een map. Hier is de syntaxis:
find /directory/path/file -type f -exec sed -i 's/old_string/new_string/g' {} \;
Vervang /directory/path/file door de map die de bestanden bevat die je wilt verwerken.
Bij het gebruik van de tweede methode is het raadzaam om een back-upbestand te maken voor eenvoudige herstelmogelijkheden in geval van onbedoelde vervangingen. Als alternatief kun je de -i optie weglaten om de bewerking in het bestand uit te schakelen en het originele bestand ongewijzigd te laten.
Gebruik sed voor logbestand analyse
Naast het aanpassen van patronen, is de sed-command in Linux ook nuttig voor logbestand analyses. Hiermee kun je eenvoudig naar een specifiek patroon in het logbestand zoeken en de resultaten extraheren voor eenvoudigere diagnostiek.
Om dit te doen, voeg je het > symbool toe om de overeenkomende patronen naar een tekstbestand te sturen. Terwijl de command afhankelijk van je gebruik kan variëren, blijft de basis syntaxis als volgt:
sed -n 's/pattern/p' logfile.log > extracted_data.txt
Verander het regex-patroon op basis van de gegevens die je wilt zoeken, zoals een IP-adres, foutmelding of tijdstempel. Gebruik bijvoorbeeld dit script om gelogde fouten te exporteren:
sed -n 's/Error: \(.*\)/\1/p' logfile.log > error_logs.txt
Gebruik sed voor HTML/XML Tag manipulatie
De sed-command in Linux maakt het eenvoudig om strings in code te vervangen. Je kunt bijvoorbeeld zoeken naar specifieke HTML- of XML-tags en hun attributen vervangen met de vervangingscommand. Hier is de syntaxis:
sed 's/<tag attribute="old_pattern">/<tag attribute="new_pattern"/' file.html
De command varieert afhankelijk van de tags en attributen die je wilt wijzigen. Bijvoorbeeld, deze sed-command wijzigt alle kleurattributen van kopteksten naar zwart:
sed 's/\(<h[1-6].*color:\) [^;]*/\1 black/g' webpage.html
De command zoekt naar het volgende HTML-codepatroon en vervangt de kleurwaarde met de nieuwe string:
<h1 style="color: value;">Heading 1</h1>
Gebruik sed voor externe bestanden
Complexe sed-commands kunnen meerdere scripts bevatten. Hoewel je ze in één enkele command kunt toevoegen met de optie -e, is dit moeilijk te schrijven en vatbaar voor fouten.
Als alternatief kun je een extern SED-bestand maken met meerdere scripts. Volg de onderstaande stappen:
- Voer de nano-command uit om een nieuw scriptbestand te maken en de teksteditor te openen. Vervang script door de gewenste bestandsnaam:
nano script.sed
2. Schrijf je scripts en zorg ervoor dat elke regel één script bevat zonder aanhalingstekens, zoals het volgende:
s/old_pattern1/new_pattern1/g
/old_pattern2/d
3. Druk op Ctrl+X en vervolgens op Y om de editor te sluiten en het bestand op te slaan.
4. Voer de scripts uit door het bestand toe te voegen met de –f optie in je command. De syntaxis ziet er als volgt uit:
sed -f script.sed destination_file.txt
Gebruik sed voor Backreferences in Regex
Backreferences stellen je in staat om naar eerder gematchte patronen te verwijzen en ze opnieuw te gebruiken in de nieuwe string. Dit elimineert de noodzaak om het regex-patroon opnieuw te schrijven, waardoor het script eenvoudiger wordt.
Het patroon dat wordt gebruikt als referentie in de sed-command wordt een capture group genoemd. Deze is ingesloten in haakjes en wordt ook gebruikt voor uitgebreide reguliere expressies.
Om naar de capture group te verwijzen, gebruik je een backslash () en een nummer dat de volgorde van het patroon aangeeft. Bijvoorbeeld, de backreference \1 hergebruikt het eerste vastgelegde regex-patroon.
Backreferences zijn handig voor het substitueren en herordenen van patronen. Bijvoorbeeld, deze sed-command gebruikt ze om de achternaam en voornaam om te keren:
echo "Doe, John" | sed 's/\(.*\), \(.*\)/\2 \1/'
De twee \(.*\) regex-patronen vangen de woorden “Doe” en “John” op, en stellen ze als referentie in. Aangezien de nieuwe string begint met de tweede backreference, zal de nieuwe waarde John Doe zijn.
Conclusie
De sed (stream editor) command in Linux is een hulpmiddel waarmee je een patroon in een bestand kunt vinden en wijzigen met behulp van reguliere expressies. De syntaxis bestaat uit de sed-command, opties, het script en het doelbestand.
De sed-command bevat verschillende opties die het gedrag van het hulpmiddel wijzigen, terwijl het script bepaalt hoe het gereedschap het bijbehorende regex-patroon wijzigt. Het script bevat een subcommando, flags en de regex-patronen, die allemaal gescheiden zijn door een scheidingsteken zoals een schuine streep (/).
Om de sed-command in Linux te gebruiken, open je een command regeltoepassing zoals Terminal, een SSH-client of Hostinger’s Browser Terminal. Om een patroon te vinden en te vervangen, gebruik je het s-subcommando. Het d-subcommand wordt daarentegen gebruikt om regels of tekst te verwijderen.
De sed-command in Linux is ook nuttig voor loganalyse, het wijzigen van opmaaktags en het verwerken van bestanden in bulk. Bovendien ondersteunt het regex-backreferences en kun je een scriptbestand gebruiken om meerdere Linux-commands gelijktijdig uit te voeren.
Linux sed Command FAQ
Hoe verschilt sed van grep?
Beide, sed en grep, zijn tekstverwerkingshulpmiddelen in Linux. grep ondersteunt echter geen teksttransformatie of regelmanipulatie commands zoals substitutie. Het wordt voornamelijk gebruikt om specifieke tekstpatronen in grote bestanden te vinden en de uitvoer af te drukken.
How Is sed Used in the Bash Script?
In een Bash-script heeft de sed-command drie primaire toepassingen: afdrukken naar stdout, het verwijderen van tekst en het vervangen van een specifieke string. Het programma bepaalt welke regel het zal verwerken op basis van het opgegeven adresbereik.
Hoe roep je een variabele aan in de sed-command?
Een variabele is een teken dat we een waarde toewijzen, waardoor de leesbaarheid van de sed-command verbetert. Het kan een getal, teken, bestandsnaam of apparaat zijn. De shell breidt variabelen uit. Bijvoorbeeld, als de string een schuine streep (/) bevat, gebruik dan een ander scheidingsteken, zoals een pijp (|).
Hoe verschilt de sed-command van de awk-command?
De sed-command wordt gebruikt voor eenvoudige tekstmodificatie, zoals het vervangen, verwijderen en invoegen van een patroon in een invoerbestand. awk daarentegen wordt gebruikt voor complexere taken zoals data-extractie, tekstmanipulatie en wiskundige berekeningen. Het ondersteunt ook programmeeruitdrukkingen zoals if/else en do/while.