Sed Erstatt Newline Med Space

Sed Erstatt Newline Med Space



I UNIX/Linux er sed-kommandoen et dedikert verktøy for å redigere strømmer. Den kan utføre ulike operasjoner på en tekststrøm, som å søke, finne og erstatte og sette inn/slette. For det meste brukes imidlertid sed til å finne og erstatte tekstinnhold.

I denne guiden vil vi vise frem å erstatte nylinjer med plass ved å bruke sed.

Bruke sed for å erstatte tekst

Først, la oss raskt se på å utføre grunnleggende finn og erstatte ved å bruke sed. Den samme metoden vil bli brukt når du erstatter nylinjer med mellomrom med noen tilleggsmuligheter. Kommandostrukturen er som følger:







$ sed -e 's///'

Ta en titt på følgende kommando:



$ ekko 'den raske brunreven' | sed -e 's/quick/fast/g'



Ekko-kommandoen skriver ut strengen til STDOUT . STDOUT-strømmen er deretter rør å sed. Vi har bedt sed om å erstatte alle forekomster av rask som skal erstattes med rask. Til slutt skrives utdataene ut på skjermen.





Bytte ut nye linjer med plass

For demonstrasjon har jeg laget følgende tekstfil test.txt med flere dummy-innhold:

$ katt test.txt



Sed-kommandoen godtar regulære uttrykk for å beskrive ulike mønstre. Ved å utnytte denne funksjonen skal vi beskrive newline som \n. La oss prøve å erstatte de nye linjene med mellomrom:

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

Det fungerte imidlertid ikke som forventet. For å nå dette målet trenger vi noen ekstra alternativer. Ta en titt på følgende kommando:

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

Sed-kommandoen har flere seksjoner; hver angir en spesifikk oppgave:

  • :a: Oppretter en etikett 'a'
  • N: Legger neste linje til mønsterrommet
  • $!ba: Hvis ikke den siste linjen, går tilbake til etiketten 'a'
  • s/\n/ /g: Finner og erstatter ny linje (\n) med mellomrom (/ /). Mønsteret samsvarer globalt (/g)

Sed-kommandoen går gjennom trinnene til den når siste linje, og erstatter alle \n tegn med mellomrom.

I stedet for denne komplekse kommandoen, kan vi forenkle ting ved å bruke -z-flagget som spesifiserer at sed skal fungere med null-separerte poster. Kommandoen vil se slik ut:

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

Alternative metoder

Mens sed kan gjøre oppgaven helt fint, er det noen alternative verktøy. I denne delen skal vi kort undersøke et par av dem.

For følgende eksempel kan vi bruke tr-kommandoen til å erstatte ny linje med mellomrom på en enkel måte:

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

Vi kan også bruke perl til å gjøre jobben. Følgende syntaks er også lik det vi brukte med sed (men forenklet):

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

En annen måte å erstatte nylinjer med mellomrom er å bruke lim-kommandoen. Merk at det bare kan fjerne ett tegn:

$ paste -s -d ' ' test.txt

I likhet med sed kommer Linux med et annet verktøy awk. I likhet med sed kan den også utføre noen avanserte utskiftninger på inngangen. For vårt formål, bruk følgende awk-kommando:

$ awk 1 ORS=' ' test.txt

Konklusjon

Denne guiden utforsket hvordan vi kan erstatte newline med space ved å bruke sed. Det ble oppnådd på to forskjellige måter. Denne veiledningen inneholder også andre relevante verktøy som vi kan bruke til å erstatte ny linje med mellomrom.

I stedet for å bruke komplekse kommandoer som er vanskelige å huske, bruker vi Bash-skripting til å utføre mange ting i Linux. Selv om det går på bekostning av noe ytelse, er fleksibiliteten og brukervennligheten verdt det. Lære mer om Bash scripting for nybegynnere .