Sed Vervang nieuwe regel door spatie

Sed Vervang Nieuwe Regel Door Spatie



In UNIX/Linux is de opdracht sed een speciaal hulpmiddel voor het bewerken van streams. Het kan verschillende bewerkingen op een tekststroom uitvoeren, zoals zoeken, vinden en vervangen, en invoegen/verwijderen. Voor het grootste deel wordt sed echter gebruikt om tekstinhoud te zoeken en te vervangen.

In deze gids zullen we het vervangen van nieuwe regels door ruimte laten zien met behulp van sed.

Sed gebruiken voor het vervangen van tekst

Laten we eerst snel kijken naar het uitvoeren van basis zoeken en vervangen met behulp van sed. Dezelfde methode wordt gebruikt bij het vervangen van nieuwe regels door spaties met enkele extra opties. De commandostructuur is als volgt:







$ sed -e 's///'

Kijk eens naar het volgende commando:



$ echo 'de snelle bruine vos' | sed -e 's/snel/snel/g'



Het echo-commando drukt de tekenreeks af naar STDOUT . De STDOUT-stream is dan doorgesluisd te sederen. We hebben sed opgedragen om elk exemplaar van snel te vervangen door snel te vervangen. Ten slotte wordt de uitvoer op het scherm afgedrukt.





Nieuwe regels vervangen door ruimte

Ter demonstratie heb ik het volgende tekstbestand test.txt gemaakt met verschillende dummy-inhoud:

$ kat test.txt



Het sed-commando accepteert reguliere expressies voor het beschrijven van verschillende patronen. Gebruikmakend van deze functie, gaan we newline omschrijven als \n. Laten we proberen de nieuwe regels te vervangen door witruimte:

$ sed -e 's/\n/ /g' test.txt

Dat werkte echter niet zoals verwacht. Om dit doel te bereiken, hebben we enkele extra opties nodig. Kijk eens naar het volgende commando:

$ sed -e ':a;N;$!ba;s/\n/ /g' test.txt

Het sed-commando heeft meerdere secties; elk duidt een specifieke taak aan:

  • :a: Creëert een label 'a'
  • N: Voegt de volgende regel toe aan de patroonruimte
  • $!ba: Indien niet de laatste regel, keert terug naar label 'a'
  • s/\n/ /g: Vindt en vervangt nieuwe regel (\n) door spatie (/ /). Het patroon komt wereldwijd overeen (/g)

Het sed-commando doorloopt de stappen totdat het de laatste regel bereikt, waarbij alle \n-tekens worden vervangen door spatie.

In plaats van deze complexe opdracht, kunnen we dingen vereenvoudigen door de vlag -z te gebruiken die sed specificeert om te werken met null-gescheiden records. De opdracht zou er als volgt uitzien:

$ sed -z -e 's/\n/ /g' test.txt

Alternatieve methoden

Hoewel sed de taak prima kan uitvoeren, zijn er enkele alternatieve hulpmiddelen. In deze sectie zullen we er een paar kort bekijken.

Voor het volgende voorbeeld kunnen we de opdracht tr gebruiken om op een eenvoudige manier newline te vervangen door witruimte:

$ tr '\n' ' ' < test.txt

We kunnen ook perl gebruiken om het werk te doen. De volgende syntaxis is ook vergelijkbaar met wat we met sed hebben gebruikt (maar vereenvoudigd):

$ perl -p -e 's/\n/ /' test.txt

Een andere manier om nieuwe regels te vervangen door witruimte is door de opdracht plakken te gebruiken. Merk op dat het slechts één teken kan verwijderen:

$ plak -s -d ' ' test.txt

Net als bij sed, wordt Linux geleverd met een andere tool awk. Net als bij sed, kan het ook enkele geavanceerde vervangingen op de invoer uitvoeren. Gebruik voor ons doel het volgende awk-commando:

$ awk 1 ORS=' ' test.txt

Conclusie

Deze gids onderzocht hoe we newline kunnen vervangen door ruimte met behulp van sed. Het werd op twee verschillende manieren bereikt. Deze gids bevat ook andere relevante tools die we kunnen gebruiken om newline te vervangen door witruimte.

In plaats van complexe opdrachten te gebruiken die moeilijk te onthouden zijn, gebruiken we Bash-scripting om veel dingen in Linux uit te voeren. Hoewel het ten koste gaat van wat prestaties, zijn de flexibiliteit en bruikbaarheid het waard. Leer meer over Bash-scripts voor beginners .