sed | |
---|---|
Type | computerprogram , UNIX [d] værktøj , teksteditor og scriptsprog |
Udvikler | Lee McMahon [d] [1] |
Operativ system | Unix-lignende operativsystem |
Første udgave | 1974 |
nyeste version | 4.8 ( 15. januar 2020 ) |
Internet side | gnu.org/software/sed/ |
sed (fra engelsk. S tream ED itor ) er en streaming teksteditor (såvel som et programmeringssprog ), der anvender forskellige foruddefinerede teksttransformationer til en seriel strøm af tekstdata.
Det blev oprindeligt skrevet som et UNIX -værktøj af Lee E. McMahon fra Bell Labs i 1973-74 . sed er nu tilgængelig for stort set alle operativsystemer, der understøtter kommandolinjearbejde .
Sed er et Turing-komplet sprog, fordi det kan bruges til at skabe en Turing-maskine [2] [3] .
sed tager en inputstrøm (normalt en fil) linje for linje, redigerer hver linje i henhold til reglerne defineret i sed -scriptet ved at bruge almindeligt sed -sprog og udskriver derefter resultatet til outputstrømmen.
sed omtales ofte som en ikke-interaktiv teksteditor. Den adskiller sig fra almindelige teksteditorer ved sin "inversion" i forhold til teksten og sættet af redigeringskommandoer. Almindelige teksteditorer indlæser først hele teksten i dokumentet og anvender derefter kommandoer til det én ad gangen, mens sed først indlæser et sæt kommandoer i sig selv og derefter anvender hele sættet af kommandoer på hver tekstlinje. Da der kun er én linje i hukommelsen ad gangen, kan sed behandle vilkårligt store tekstfiler.
Sed- kommandosættet er modelleret efter ed- editoren , men vær opmærksom på dets inversion. For eksempel betyder eds 25d-kommando " gå til linje 25 og slet den ", mens den samme sed -kommando betyder " hvis det er linjenummer 25, så slet (udskriv ikke) det ". En bemærkelsesværdig undtagelse er kopierings- og flytkommandoerne, som spænder over en række linjer og derfor ikke har nogen direkte sed- ækvivalenter . I stedet introducerer sed en ekstra buffer kaldet "capture space" og yderligere kommandoer til at manipulere den. For eksempel vil kommandoen " kopier linje 25 til linje 76 " ( 25t76 ) i ed blive kodet som to separate kommandoer ( 25h; 76g ) i sed for at gemme linjen i capture space, indtil dataene er hentet.
Følgende eksempel viser en typisk brug af sed :
sed -e 's/oldstuff/newstuff/g' inputFileName > outputFileNameHer er en erstatning; g er global, hvilket betyder " alle forekomster af den søgte værdi ". Efter den første fremadgående skråstreg er der et regulært udtryk at søge efter, efter det andet et erstatningsudtryk. Ud over skråstregen kan der dog bruges et andet tegn. Altså for eksempel udtrykkene
ekko 123123 | sed 's/1/5/g' echo 123123 | sed 's%1%5%g' ekko 123123 | sed 's$1$5$g' echo 123123 | sed 's|1|5|g'er fuldstændig ligeværdige.
Erstat-kommandoen (s///) er den mest kraftfulde og mest brugte sed- kommando . Stdout-omdirigeringen " > outputFileName" kan udelades, i hvilket tilfælde sed vil udskrive resultatet til skærmen.
På Unix bruges sed- kommandoen ofte som et filter i en pipeline (| eller pipe):
generere_data | sed -e 's/x/y/'På denne måde genereres data og sendes til pipelinen for at erstatte x med y .
Flere kommandoer kan kombineres i én fil (for eksempel subst.sed) og derefter anvendes som:
sed -f subst.sed inputFileName > outputFileNameEller du kan skrive en script-fil ved hjælp af en shebang . For eksempel ved at oprette en eksekverbar fil subst.sedmed indholdet:
#!/bin/sed -f s/x/y/gDet kan gøres direkte:
subst.sed inputFileName > outputFileNameUd over udskiftning er andre former for enkel behandling mulig. For eksempel fjerner følgende script tomme linjer eller linjer, der kun indeholder mellemrum:
sed -e '/^\s*$/d' inputFilnavnDet sidste eksempel brugte metakarakterdelen af de regulære udtryk:
Komplekse konstruktioner af sed er mulige i det omfang, det kan opfattes som et højt specialiseret, omend simpelt, programmeringssprog . Kontrolflowet kan for eksempel styres med en etiket (et kolon efterfulgt af en streng, der skal være navnet på etiketten) og en b -greninstruktion ; en b - sætning efterfulgt af et gyldigt etiketnavn vil flytte behandlingen til blokken efter etiketten; hvis etiketten ikke findes, vil grenen afslutte scriptet ( script ).
sed er en af de tidligste Unix-kommandoer, der tillod dig at behandle datafiler fra kommandolinjen. sed har udviklet sig som en naturlig efterfølger til den populære grep-kommando . I lighed med det senere AWK -programmeringssprog tillod sed kraftfuld og interessant datamanipulation i shell - scripts og var et af de første Unix-værktøjer, der rent faktisk opmuntrede til korrekt brug af regulære udtryk.
Med hensyn til udførelseshastighed er sed mærkbart hurtigere end AWK.
sed og awk betragtes ofte som stamfader og inspirationer til Perl-sproget , og især syntaksen " " s///fra eksemplet ovenfor.
Sed - sproget har ingen variabler, kun GOTO primitive og forgrenende funktionalitet; det er dog et Turing-komplet sprog.
GNU sed har flere nye funktioner, såsom filerstatningsredigering (erstatning af den originale fil med output fra sed ). In-place redigering bruges ofte i stedet for f.eks . ed -scriptet
sed -i 's/abc/def/' filkan bruges i stedet
ed fil 1 ,$ s/abc/def/ w qDer er en udvidet version af sed kaldet Super-sed ( ssed ), som inkluderer Perl-kompatible regulære udtryk .
Ved at bruge HEX-16 kan du indsætte specialtegn
Karakter i ASCII | Overholdelse i HEX-16 |
---|---|
" | \x22 |
' | \x27 |
, | \x2C |
$ | \x24 |
! | \x21 |
; | \x3B |
` | \x60 |
| | \x7C |
Eksempel på brug:
Påkrævet: Erstat "hello" med "hello world"
sed 's/\x22hello\x22\x2C/\x22hello world\x22\x2C/g'Nogle karakterer i HEX-16 bliver fortsat behandlet som regulære udtryk og kræver escape.
Eksempel:
Påkrævet: replace $config['default_host'] = ''; to $config['default_host'] = ' localhost ';
sed -i 's/\x24config\[\x27default_host\x27\] = \x27\x27\x3B/\x24config\[\x27default_host\x27\] = \x27localhost\x27\x3B/g' /etc/roundcube/conf .inc.php
|
|
Unix-kommandoer | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
|
Programmeringssprog | |
---|---|
|
Teksteditorer ( liste ) | |
---|---|
Unix / Linux | |
DOS | |
Windows | |
Cross-platform | |
SDK | |
Funktioner |