SED erstatte Newline med plass

SED erstatte Newline med plass
I UNIX/Linux er SED -kommandoen et dedikert verktøy for redigering av strømmer. Den kan utføre forskjellige operasjoner på en tekststrøm, for eksempel å søke, finne og erstatte, og innsetting/sletting. For det meste brukes imidlertid SED for å finne og erstatte tekstinnhold.

I denne guiden vil vi vise frem å erstatte newlines med plass ved hjelp av sed.

Bruker SED for å erstatte tekst

La oss først raskt se på å utføre grunnleggende funn og erstatte ved hjelp av SED. Den samme metoden vil bli brukt når du bytter ut newlines med mellomrom med noen ekstra alternativer. Kommandostrukturen er som følger:

$ sed -e 's ///'

Ta en titt på følgende kommando:

$ ECHO "The Quick Brown Fox" | sed -e 's/hurtig/rask/g'

Echo -kommandoen skriver ut strengen til stdout. Stdout -strømmen blir deretter ledet til sed. Vi har bedt SED om å erstatte enhver forekomst av Quick for å bli erstattet med Fast. Endelig skrives utgangen ut på skjermen.

Bytte ut newlines med plass

For demonstrasjon har jeg opprettet følgende tekstfiltest.txt med flere dummy innhold:

$ kattest.tekst

SED -kommandoen godtar regelmessige uttrykk for å beskrive forskjellige mønstre. Utnytte denne funksjonen, vi skal beskrive Newline som \ n. La oss prøve å erstatte Newlines med Whitespace:

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

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

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

SED -kommandoen har flere seksjoner; Hver betegner en spesifikk oppgave:

  • : A: Oppretter en etikett 'A'
  • N: legger neste linje til mønsterområdet
  • $!BA: Hvis ikke den siste linjen, går du tilbake til etiketten 'A'
  • s/\ n//g: Finn og erstatter Newline (\ n) med plass (//). Mønsteret er matchet globalt (/g)

SED -kommandoen sløyfer gjennom trinnene til den når den siste linjen, og erstatter alle \ n tegn med plass.

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

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

Alternative metoder

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

For følgende eksempel kan vi bruke TR -kommandoen til å erstatte Newline med Whitespace på en enkel måte:

$ tr '\ n "< test.txt

Vi kan også bruke Perl til å gjøre jobben. Følgende syntaks ligner også på det vi brukte med SED (men forenklet):

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

En annen måte å erstatte newlines med Whitespace er å bruke Paste -kommandoen. Merk at det bare kan fjerne ett tegn:

$ pasta -s -d "test.tekst

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

$ awk 1 ors = "test.tekst

Konklusjon

Denne guiden utforsket hvordan vi kan erstatte Newline med plass ved hjelp av SED. Det ble oppnådd på to forskjellige måter. Denne guiden inneholder også andre relevante verktøy som vi kan bruke til å erstatte Newline med Whitespace.

I stedet for å bruke komplekse kommandoer som er vanskelig å huske, bruker vi bash -skript for å utføre mange ting i Linux. Selv om det kommer på bekostning av noen ytelser, er fleksibiliteten og brukervennligheten verdt det. Lær mer om bashskripting for nybegynnere.