Sed Ersätt Newline Med Space

Sed Ersatt Newline Med Space



I UNIX/Linux är kommandot sed ett dedikerat verktyg för att redigera strömmar. Den kan utföra olika operationer på en textström, som att söka, hitta och ersätta och infoga/ta bort. För det mesta används dock sed för att hitta och ersätta textinnehåll.

I den här guiden kommer vi att visa upp att ersätta nylinjer med utrymme med hjälp av sed.

Använda sed för att ersätta text

Först, låt oss snabbt titta på att utföra grundläggande hitta och ersätta med sed. Samma metod kommer att användas när du byter ut nya rader med mellanslag med några ytterligare alternativ. Kommandostrukturen är som följer:







$ sed -e 's///'

Ta en titt på följande kommando:



$ echo 'den snabba bruna räven' | sed -e 's/quick/fast/g'



Echo-kommandot skriver ut strängen till STDOUT . STDOUT-strömmen är då rör att sed. Vi har instruerat sed att ersätta alla fall av snabb som ska ersättas med snabb. Slutligen skrivs resultatet ut på skärmen.





Ersätter nya rader med utrymme

För demonstration har jag skapat följande textfil test.txt med flera dummy-innehåll:

$ cat test.txt



Kommandot sed accepterar reguljära uttryck för att beskriva olika mönster. Med den här funktionen kommer vi att beskriva newline som \n. Låt oss försöka ersätta de nya raderna med blanksteg:

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

Det fungerade dock inte som förväntat. För att uppnå detta mål behöver vi några ytterligare alternativ. Ta en titt på följande kommando:

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

Kommandot sed har flera sektioner; var och en betecknar en specifik uppgift:

  • :a: Skapar en etikett 'a'
  • N: Lägger till nästa rad i mönsterrymden
  • $!ba: Om inte den sista raden, återgår till etiketten 'a'
  • s/\n/ /g: Hittar och ersätter nyrad (\n) med mellanslag (/ /). Mönstret matchas globalt (/g)

Kommandot sed går igenom stegen tills det når sista raden och ersätter alla \n tecken med blanksteg.

Istället för detta komplexa kommando kan vi förenkla saker genom att använda flaggan -z som anger att sed ska fungera med nollseparerade poster. Kommandot skulle se ut så här:

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

Alternativa metoder

Även om sed kan göra uppgiften bra, finns det några alternativa verktyg. I det här avsnittet ska vi kort undersöka ett par av dem.

För följande exempel kan vi använda tr-kommandot för att ersätta newline med blanksteg på ett enkelt sätt:

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

Vi kan också använda perl för att göra jobbet. Följande syntax liknar också vad vi använde med sed (men förenklat):

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

Ett annat sätt att ersätta nyrader med blanksteg är att använda kommandot klistra in. Observera att det bara kan ta bort ett tecken:

$ paste -s -d ' ' test.txt

I likhet med sed kommer Linux med ett annat verktyg awk. I likhet med sed kan den också utföra några avancerade ersättningar på ingången. För vårt syfte, använd följande awk-kommando:

$ awk 1 ORS=' ' test.txt

Slutsats

Den här guiden utforskade hur vi kan ersätta newline med space med hjälp av sed. Det uppnåddes på två olika sätt. Den här guiden innehåller även andra relevanta verktyg som vi kan använda för att ersätta nyrad med blanksteg.

Istället för att använda komplexa kommandon som är svåra att memorera, använder vi Bash-skript för att utföra många saker i Linux. Även om det kostar en del prestanda, är flexibiliteten och användbarheten värt det. Lära sig mer om Bash-skript för nybörjare .