I Unix/Linux er SED en dedikert kommando for redigering av strømmer. Det er her navnet på kommandoen kommer (Stream Editor). Det tar en strøm som input, filtrerer og forvandler innholdet og sender ut resultatet som instruert.
I denne guiden vil vi se på å bruke SED med de vanlige uttrykkene (Regex for kort) for å erstatte innholdet i en tekstfil. Denne guiden vil bruke GNU/Linux -versjonen av SED.
Ta tak i en eksempler på tekstfil
For demonstrasjonsformål lager vi en enkel tekstfil med litt tekst for å praktisere våre SED -kommandoer. Lag en tekstfil ved hjelp av Nano:
$ nano sed-practice.tekst
Inne i filen, skriv inn følgende tekst:
#!/bin/bash
Ekko "The Quick Brown Fox"
ekko "hopper over den late hunden"
Erstatte tekster ved hjelp av SED
Den primære kommandostrukturen til SED for å erstatte tekster er som følger:
$ sed -i 's /// g'
Her:
La oss prøve det. I det følgende eksemplet erstatter vi de med DE i sed-praksis.tekst:
$ sed -i 's/the/the/g' sed -practice.tekst
Bekreft endringene.
$ CAT SED-PRACTICE.tekst
Som du kan se, endret vi innholdet i filen.
Arbeider med avgrensningskarakterer
Som beskrevet i forrige seksjon, kommer SED -instruksjoner med avgrensningskarakterer for å skille de forskjellige delene. Hvis vi ønsker å erstatte tekstene som inneholder avgrensningskarakteren, må vi bruke tilbakeslaget (\) for å unnslippe den.
La oss se på følgende eksempel:
$ sed -i 's/\/bin \/bash/\/usr \/bin \/zsh/g' sed -practice.tekst
Her erstatter vi/bin/bash med/usr/bin/zsh. Bekreft om forsøket er vellykket.
$ CAT SED-PRACTICE.tekst
Ved å bruke dette sikksakkmønsteret på frem og tilbakeslag, kan det lett bli ekstremt forvirrende. Derfor er det en vanlig praksis å bruke andre avgrensere som tykktarm (:) eller vertikal bar (|). La oss omskrive kommandoen ved hjelp av vertikal stang som avgrenser:
$ sed -i 's |/usr/bin/zsh |/bin/bash | g' sed -practice.tekst
Regex -karaktersett
Vi kan bruke karaktersettene til å beskrive et sett med tegn som skal erstatte i SED. Her er noen vanlige karaktersett du vil komme over:
I det følgende eksempel erstatter vi alle sifrene med alfabetet. Ta en titt på følgende eksempel:
$ ECHO 1001001 | sed -e 's | [0-9] | k | g'
Her erstatter SED alle sifrene (1 og 0, i dette tilfellet) det finner med bokstaven K.
Hva om vi vil erstatte 1 med A og 0 med B? Her er en måte å oppnå dette på:
$ ECHO 1001001 | sed -e 's | 1 | a | g' | sed -e 's | 0 | b | g'
Her erstatter den første SED -kommandoen 1 med en. Utgangen blir deretter avledes til en andre SED -kommando som erstatter 0 med B.
Konklusjon
I denne guiden demonstrerte vi kort de forskjellige måtene å bruke SED for å finne og erstatte tekstene. Ved hjelp av Regex kunne vi finjustere søket og erstatte det nøyaktige innholdet. Lær mer om Sed Regex.
Ved hjelp av noen ekstra verktøy som Find, kan vi bruke SED for å til og med rekursivt endre filene til en hel katalog.
Vi kan også implementere SED i bashskriptene for å utføre mer kompleks strømredigering. Lær mer om å starte reisen med bashskripting.