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 .