Hvordan gjør du flere SED -erstatninger

Hvordan gjør du flere SED -erstatninger
SED (Stream Editor) -kommandoen kan utføre forskjellige funksjoner på strømmer i UNIX/Linux. For eksempel: Søke, finne og erstatte, innsetting/sletting osv. Imidlertid brukes det mest til å finne og erstatte tekster. SED -kommandoen tillater redigeringsfiler uten å åpne dem. Fordi det er et kommandolinjeverktøy, kan det også implementeres i skript.

I denne guiden vil vi vise hvordan du utfører flere SED -erstatninger i en enkelt fil.

Erstatte tekst ved hjelp av SED

Opprette en prøvetekst
SED -kommandoen driver en definert oppgave på en strøm. For demonstrasjonsformål skal vi lage en dummy -fil for å tjene som strømmen. Opprett en tekstfil ved hjelp av følgende kommando:

katt < test.txt
den raske brune reven
hopper over den late hunden
Eof

Sjekk innholdet i filen ved å bruke følgende kommando:

$ kattest.tekst

Erstatte tekst
For å erstatte tekster er den generelle kommandostrukturen som følger:

$ sed 's /// g'

Her søker SED etter mønsteret som er spesifisert i den gitte strømmen og erstatter den med den gitte erstatningsteksten. G -flagget sikrer at SED søker i hele teksten etter mønsterkamper.

La oss prøve det på demo -filen vår. Kjør følgende kommando:

$ sed 's/the/hallo/g' test.tekst

Utføre flere erstatninger

I det siste eksemplet byttet vi ut et enkelt tekstmønster. Hva om du ønsket å erstatte flere mønstre?

Det er et par forskjellige måter å gjøre det på. Vi kan gjøre det innenfor en enkelt SED -kommando eller dele den inn i flere.

Flere erstatninger i en enkelt SED -kommando
Vi kan gi flere uttrykk for å SED ved hjelp av -e -flagget. Ta en titt på følgende eksempel:

$ sed -e 's/the/hallo/g' -e 's/lat/sliten/' test.tekst

Her erstatter det første uttrykket “The” med “Hello”. Det andre uttrykket erstatter "lat" med "trøtt".

I stedet for å erklære flere uttrykk, kan vi også kombinere dem til et enkelt uttrykk, hver del atskilt med en semikolon (;). Ta en titt på følgende eksempel:

$ sed -e 's/the/hallo/g; s/lat/sliten/' test.tekst

Hvis du kjører det samme settet med SED -kommandoer om og om igjen, kan vi plassere dem i en enkelt fil. Vi kan passere filen som kilden til kommandoer til SED ved hjelp av -f -flagget. Kommandostrukturen ser ut som følgende:

$ sed -f

La oss sette det ut i handling. Vi samlet alle SED -kommandoene som vi ønsker å kjøre i filkommandoene.tekst.

$ CAT -kommandoer.tekst

Merk at hvert unikt SED -uttrykk er plassert i en ny linje for å forbedre den visuelle klarheten. Du kan imidlertid også bruke Semicolon -teknikken for å slå sammen alle uttrykkene til et enkelt uttrykk.

Nå kan vi spesifisere denne filen som er sed som listen over uttrykk som skal kjøres på den gitte strømmen:

$ sed -f kommandoer.TXT -test.tekst

Flere SED -erstatninger med flere SED -kommandoer
Dette er en mer enkel tilnærming. I stedet for å bruke et hvilket som helst fancy triks, filtrerer vi strømmen ved hjelp av en SED -kommando og gir utdataene til de andre SED -kommandoene.

Ta en titt på følgende eksempel:

$ sed 's/the/hallo/g' test.txt | sed 's/lat/sliten/'

Her erstatter den første SED -kommandoen “The” med “Hello”. Utgangen blir deretter ledet til den andre SED -kommandoen som erstatter "lat" med "trøtt".

Selv om denne metoden er enkel, kan den veldig lett bli overflødig, spesielt hvis du trenger å kjøre flere SED -uttrykk. I så fall er bruk av SED -kommandofilen den mest effektive måten.

Konklusjon

I denne guiden utforsket vi de forskjellige måtene hvordan vi kan utføre flere erstatninger ved hjelp av SED. Vi demonstrerte hvordan vi kan passere flere uttrykk ved hjelp av -e -flagget. Vi komprimerte flere uttrykk til et enkelt uttrykk ved hjelp av semikolonene. For en mer repeterende arbeidsmengde demonstrerte vi også bruken av en tekstfil for å kjøre flere SED -uttrykk på en gang.

Til slutt undersøkte vi bruken av SED på en enkel måte: røring av en SED -kommando til en annen.

I denne guiden endrer ikke SED -kommandoene innholdet i filen. Lær mer om bruken av SED for å redigere filene på stedet.

Glad databehandling!