Hva er SED i Linux og hvordan bruker du det?
sed står for s tream ed itor og er en vanlig brukt kommando i Linux / Unix. Navnet kommer fra en portmanteau av disse to ordene. Det er ikke en tekstredigeringsprogram, selv om det endrer tekst. I stedet mottar sed tekstinnmatning som en "stream" og redigerer strømmen i henhold til instruksjonene dine.
I stor grad bruker folk sed
som en kommandolinjeversjon av finne og erstatte. Hovedkommandoen i programmet brukes til å erstatte en tegnstreng for en annen. Dette gjør det nyttig å kjøre finne og erstatte funksjoner på en gruppe filer, men det er ikke så enkelt å bruke som noe fra Notisblokk eller Word. Du finner ut at syntaksen tar litt vant til, men når du har det nede, vil du se hvor utrolig kraftig denne kompakte redaktøren kan være.
Bruke sed til substitusjon
For å bruke sed, må du åpne et Terminal-vindu. Kommandoen er påkalt med sed
, men å skrive det alene vil ikke gjøre noe. Du må oppgi en av kommandoene, samt noen parametere.
Den vanligste parameteren er erstatning, eller s
. En enkel sed
substitusjonskommando ser noe ut som følgende:
sed 's / cat / dog /'
Denne kommandoen vil bestille sed for å skanne innkommende tekst og erstatte hver forekomst av strengen "katt" med "hund". For å demonstrere, bruker vi echo
til å gi sed noe å jobbe med.
ekkokattkatapult | sed 's / cat / dog /'
Det er tre hoveddeler til sed-kommandoen. Først er det sed
som starter programmet. Da er det s
som starter utskiftningskommandoen. Den fremre skråstrek /
er en separator. Strengen etter det vil være strengen sed ser etter. Strengen etter den andre skråstrek vil være erstatningskarakterene som sed skriver til strømmen. Endelig slash lukker kommandoen. Alt sammen er det 's/text-to-find/text-to-replace/'
.
Legg merke til de enkelte sitatene i det eksemplet. De enkelte sitatene tillater deg å bruke meta tegn i kommandoen din. Selv om sitater ikke er avgjørende for de fleste av våre eksempler, bør du utvikle vanen med å bruke sitater for alle kommandoer.
Hva med delstrenger? Ovennevnte kommando vil fungere på ethvert utseende av strengen "katt", selv om den er en del av et annet ord. For eksempel blir "catapult" "dogapult" som "katamaran" blir "dogamaran".
ekkokatapult | sed 's / cat / dog /'
Global erstatning
I vårt første eksempel har du kanskje lagt merke til at førstegangsen av den tilsvarende strengen ble erstattet. Som mange GNU-verktøy er sed linjebasert. Som et resultat, opererer den bare på den første kampen i en linje. Hvis du har flere kamper for kandidatstrengen din i linjen, vil bare den første bli endret. For å gjøre sed arbeid på hver forekomst av målstrengen, bruk g
flagget på slutten av kommandoen:
sed 's / cat / dog / g'
Dette ville fungere som følgende eksempel:
ekkokat katapult katamaran | sed 's / cat / dog / g'
Uten det globale flagget vil bare første forekomst av "katt" i hver linje bli erstattet.
Innstilling av inngangs- og utdatafiler
Som standard vil sed operere på standardinngang. Det er imidlertid ikke så nyttig. For å kjøre sed på en fil, spesifiser filnavnet på slutten av kommandoen, slik som:
sed 's / cat / dog / g' oldfile.txt> newfile.txt
Dette vil kjøre sed på "oldfile.txt" og lagre kommandoenes utdata til "newfile.txt." Hvis "newfile.txt" ikke eksisterer, vil den bli opprettet av kommandoen. Hvis du ikke spesifiserer en utdatafil, vil sed ekko filens nye tekst til standardinngang.
Hvis du vil overskrive innholdet i en fil, må du bruke -i
flagget. Dette flagget gjør endringene "på plass."
sed -i '' s / cat / dog 'oldfile.txt
Denne kommandoen overskriver innholdet i målfilen umiddelbart, noe som er litt farlig. For å være på den sikre siden kan du opprette en sikkerhetskopi på stedet.
For å lage en sikkerhetskopi av filen, legg en utvidelse etter -i
. Det trenger ikke å være en funksjonell utvidelse: ".bu" eller ".bak" fungerer fint. Dette vil opprette en backup-fil med en utvidelse.
sed -i.bak's / cat / dog 'oldfile.txt
Dette skaper "oldfile.txt.bak", som inneholder unedited tekstdata fra den opprinnelige versjonen av "oldfile.txt."
Matcher vanlige uttrykk
Den virkelige kraften til sed
kommer fra matchende regulære uttrykk. Dette lar deg sette mønstre for matching, i stedet for bokstavsstrenge. For eksempel kan vi bruke noe som strengen nedenfor for å gjenta et sett med ett eller flere tall:
ekko "123 abc" | sed 's / [0-9] [0-9] * / & & /'
Videreutdanning
sed er et ekstremt kraftig verktøy med en dybdekraft som ligner et skriptspråk. For å lære mer om Seds fulle evner, sjekk ut Bruce Barnetts omfattende guide til sed.