sed staat voor s tream ed itor en is een veel gebruikte opdracht in Linux / Unix. De naam komt van een portmanteau van die twee woorden. Het is geen teksteditor, maar het verandert wel de tekst. In plaats daarvan ontvangt sed de tekstinvoer als een "stroom" en bewerkt de stream volgens uw instructies.

Over het algemeen gebruiken mensen sed als een commandoregelversie van vinden en vervangen. Het hoofdcommando in het programma wordt gebruikt om een ​​tekenreeks te vervangen door een andere. Dit maakt het handig om functies voor zoeken en vervangen van een batch bestanden te gebruiken, maar het is niet zo eenvoudig te gebruiken als iets uit Kladblok of Word. Je zult merken dat de syntaxis even wennen is, maar als je dat eenmaal hebt gedaan, zul je zien hoe ongelooflijk krachtig deze compacte editor kan zijn.

Sed gebruiken voor vervanging

Om Sed te gebruiken, moet je een Terminal-venster openen. Het commando wordt aangeroepen met sed, maar dat alleen typen zal niets doen. U moet een van de opdrachten opgeven, evenals enkele parameters.

De meest voorkomende parameter is substituut of s . Een eenvoudige sed substitutie-opdracht ziet er ongeveer zo uit:

 sed 's / kat / hond /' 

Met dat commando wordt sed besteld om inkomende tekst te scannen en elke instantie van de tekenreeks "kat" door "hond" te vervangen. Om te demonstreren, gebruiken we het echo commando om iets te geven om mee te werken.

 echo cat catapult | sed 's / kat / hond /' 

Het sed-commando bestaat uit drie hoofdonderdelen. Ten eerste is er sed die het programma start. Dan is er de s die het vervangingsbevel start. De schuine streep naar voren / is een scheidingsteken. De snaar daarna zal de snaar zijn waar sed naar zoekt. De tekenreeks na de tweede schuine streep is de vervangende tekens die sed naar de stream schrijft. De laatste schuine streep sluit het commando. Alles samen is het 's/text-to-find/text-to-replace/' .

Let op de enkele aanhalingstekens in dat voorbeeld. Met de enkele aanhalingstekens kunt u metatekens gebruiken in uw opdracht. Hoewel citaten niet essentieel zijn voor de meeste van onze voorbeelden, zou je de gewoonte moeten ontwikkelen om citaten te gebruiken voor alle commando's.

Hoe zit het met gedeeltelijke snaren? Het bovenstaande commando zal werken op elk uiterlijk van de string "kat", zelfs als het deel uitmaakt van een ander woord. "Katapult" wordt bijvoorbeeld "dogapult", aangezien "catamaran" "dogamaran" wordt.

 echo katapult | sed 's / kat / hond /' 

Wereldwijde vervanging

In ons eerste voorbeeld is het u misschien opgevallen dat alleen de eerste instantie van de overeenkomende tekenreeks is vervangen. Net als veel GNU-hulpprogramma's is sed gebaseerd op lijnen. Als gevolg hiervan werkt het alleen op de eerste wedstrijd binnen een rij. Als u in de regel meerdere overeenkomsten voor uw kandidaatstring hebt, wordt alleen de eerste gewijzigd. Om sed te laten werken aan elke keer dat de doelreeks voorkomt, gebruikt u de vlag g aan het einde van de opdracht:

 sed 's / kat / hond / g' 

Dit zou werken zoals het volgende voorbeeld:

 echo cat catapult catamaran | sed 's / kat / hond / g' 

Zonder de globale vlag zou alleen het eerste exemplaar van "kat" in elke regel worden vervangen.

Instellen van invoer- en uitvoerbestanden

Standaard werkt sed op standaardinvoer. Dat is echter niet zo handig. Als u sed op een bestand wilt uitvoeren, geeft u de bestandsnaam aan het einde van de opdracht op, zoals:

 sed 's / cat / dog / g' oldfile.txt> newfile.txt 

Dit zal worden uitgevoerd op "oldfile.txt" en de uitvoer van het commando opslaan in "newfile.txt." Als "newfile.txt" niet bestaat, wordt het door de opdracht gemaakt. Als u geen uitvoerbestand opgeeft, zal sed de nieuwe tekst van het bestand weergeven in de standaardinvoer.

Als u de inhoud van een bestand wilt overschrijven, moet u de vlag -i . Met deze vlag worden de bewerkingen 'op zijn plaats' geplaatst.

 sed -i '' 's / cat / dog' oldfile.txt 

Deze opdracht overschrijft de inhoud van het doelbestand onmiddellijk, wat enigszins gevaarlijk is. Om aan de veilige kant te blijven, kunt u ter plaatse een back-up maken.

Als u een back-up van het bestand wilt maken, plaatst u een extensie achter de -i . Het hoeft geen functionele extensie te zijn: ".bu" of ".bak" werkt prima. Hiermee wordt een back-upbestand met een extensie gemaakt.

 sed -i.bak's / cat / dog 'oldfile.txt 

Hiermee wordt 'oldfile.txt.bak' gemaakt, dat de onbewerkte tekstgegevens uit de oorspronkelijke versie van 'oldfile.txt' bevat.

Reguliere expressies matchen

De echte kracht van sed komt van het matchen van reguliere expressies. Hiermee kunt u patronen instellen voor overeenkomende, in plaats van letterlijke tekenreeksen. We kunnen bijvoorbeeld zoiets als de onderstaande reeks gebruiken om een ​​reeks van een of meer cijfers te herhalen:

 echo "123 abc" | sed 's / [0-9] [0-9] * / & & /' 

Verder leren

sed is een extreem krachtig hulpprogramma met een krachtdiepte vergelijkbaar met een scripttaal. Voor meer informatie over Sed's volledige mogelijkheden, bekijk Bruce Barnett's uitgebreide gids voor sed.