Sed Erstat Newline med mellemrum

Sed Erstat Newline Med Mellemrum



I UNIX/Linux er sed-kommandoen et dedikeret værktøj til redigering af streams. Den kan udføre forskellige handlinger på en tekststrøm, såsom at søge, finde og erstatte og indsætte/slette. For det meste bruges sed dog til at finde og erstatte tekstindhold.

I denne guide vil vi fremvise udskiftning af nye linjer med plads ved hjælp af sed.

Brug af sed til at erstatte tekst

Lad os først hurtigt se på at udføre grundlæggende find og udskiftning ved hjælp af sed. Den samme metode vil blive brugt ved udskiftning af nye linjer med mellemrum med nogle ekstra muligheder. Kommandostrukturen er som følger:







$ sed -e 's///'

Tag et kig på følgende kommando:



$ ekko 'den hurtige brune ræv' | sed -e 's/hurtig/hurtig/g'



Ekko-kommandoen udskriver strengen til STDOUT . STDOUT-strømmen er derefter rør at sed. Vi har instrueret sed om at erstatte enhver forekomst af hurtig, der skal erstattes med hurtig. Til sidst udskrives outputtet på skærmen.





Udskiftning af nye linjer med plads

Til demonstration har jeg oprettet følgende tekstfil test.txt med flere dummy-indhold:

$ kat test.txt



Kommandoen sed accepterer regulære udtryk til at beskrive forskellige mønstre. Ved at udnytte denne funktion vil vi beskrive newline som \n. Lad os prøve at erstatte de nye linjer med mellemrum:

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

Det virkede dog ikke som forventet. For at nå dette mål har vi brug for nogle yderligere muligheder. Tag et kig på følgende kommando:

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

Kommandoen sed har flere sektioner; hver angiver en specifik opgave:

  • :a: Opretter en etiket 'a'
  • N: Tilføjer den næste linje til mønsterrummet
  • $!ba: Hvis ikke den sidste linje, vender tilbage til etiketten 'a'
  • s/\n/ /g: Finder og erstatter ny linje (\n) med mellemrum (/ /). Mønsteret matches globalt (/g)

Sed-kommandoen går gennem trinene, indtil den når den sidste linje, og erstatter alle \n tegn med mellemrum.

I stedet for denne komplekse kommando kan vi forenkle ting ved at bruge flaget -z, der angiver, at sed skal arbejde med nul-separerede poster. Kommandoen ville se sådan ud:

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

Alternative metoder

Mens sed kan klare opgaven fint, er der nogle alternative værktøjer. I dette afsnit vil vi kort gennemgå et par af dem.

I det følgende eksempel kan vi bruge tr-kommandoen til at erstatte ny linje med mellemrum på en enkel måde:

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

Vi kan også bruge perl til at udføre arbejdet. Følgende syntaks ligner også det, vi brugte med sed (men forenklet):

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

En anden måde at erstatte nye linjer med mellemrum er at bruge kommandoen indsæt. Bemærk, at det kun kan fjerne ét tegn:

$ paste -s -d ' ' test.txt

Ligesom sed kommer Linux med et andet værktøj awk. I lighed med sed kan den også udføre nogle avancerede udskiftninger på input. Til vores formål skal du bruge følgende awk-kommando:

$ awk 1 ORS=' ' test.txt

Konklusion

Denne guide undersøgte, hvordan vi kan erstatte newline med space ved hjælp af sed. Det blev opnået på to forskellige måder. Denne vejledning indeholder også andre relevante værktøjer, som vi kan bruge til at erstatte ny linje med mellemrum.

I stedet for at bruge komplekse kommandoer, der er svære at huske, bruger vi Bash-scripting til at udføre mange ting i Linux. Selvom det kommer på bekostning af en vis ydeevne, er fleksibiliteten og brugervenligheden det værd. Lær mere om Bash scripting for begyndere .