Sed
SED (1P) POSIX programmeringsmanual SED (1P)
PROLOG
Den här manualsidan är en del av POSIX-programmerarens manual. De
Linux-implementeringen av det här gränssnittet kan skilja sig åt (konsultera
motsvarande Linux-manualsida för detaljer om Linux-beteende),
eller så kanske gränssnittet inte är implementerat på Linux.
NAME
sed — strömredigerare
SYNOPSIS
sed [ -n ] script [ fil ... ]
sed [ -n ] -e script [ -e script ] ... [ -f script_file ] ... [ fil ... ]
sed [ -n ] [ -e script ] ... -f script_file [ -f script_file ] ... [ fil ... ]
BESKRIVNING
Sed - verktyget är en strömredigerare som ska läsa en eller flera
textfiler, gör redigeringsändringar enligt ett redigeringsskript
kommandon och skriv resultaten till standardutdata. Manuset
ska hämtas från antingen skriptoperandsträngen eller en
kombination av alternativ-argumenten från -e script och -f
script_file alternativ.
ALTERNATIV
Sed - verktyget ska överensstämma med Base Definitions-volymen för
POSIX.1‐2017, avsnitt 12.2 , Riktlinjer för verktygssyntax , utom
att ordningen för presentationen av alternativen -e och -f är
signifikant.
Följande alternativ ska stödjas:
-e script Lägg till de redigeringskommandon som anges av skriptet
option-argument till slutet av redigeringsskriptet
kommandon.
-f script_file
Lägg till redigeringskommandona i filen script_file till
slutet av skriptet för redigeringskommandon.
-n Undertryck standardutgången (där varje rad, efter
den granskas för redigering, är skriven till standard
produktion). Endast rader som är explicit valda för utdata är
skriven.
Om några -e eller -f alternativ är specificerade, skriptet för redigering
kommandon ska initialt vara tomma. De kommandon som anges av var och en
Alternativet -e eller -f ska läggas till skriptet i ordningen
specificerad. När varje tillägg görs, om föregående tillägg
(om någon) kom från ett -e- alternativ, en <nylinje> ska infogas
innan det nya tillskottet. Det resulterande skriptet ska ha samma
egenskaper som skriptoperanden , som beskrivs i OPERANDS
sektion.
OPERANDS
Följande operander ska stödjas:
fil Ett sökvägsnamn för en fil vars innehåll läses och
redigerade. Om flera filoperander anges,
namngivna filer ska läsas i angiven ordning och
sammanlänkningen ska redigeras. Om ingen filoperander
är specificerade ska standardingången användas.
script En sträng som ska användas som skript för redigeringskommandon.
Ansökan ska inte presentera ett manus som
bryter mot begränsningarna för en textfil förutom det
det sista tecknet behöver inte vara en <nyrad>.
STDIN
Standardinmatningen ska användas om det inte finns några filoperander
specificeras och ska användas om en filoperand är '-' och
implementeringen behandlar "-" som en standardinmatning.
I annat fall ska standardingången inte användas. Se INPUT
sektionen FILER.
INPUT FILES
Indatafilerna ska vara textfiler. Skript_filen är namngiven av
alternativet -f ska bestå av redigeringskommandon.
MILJÖVARIABLER
Följande miljövariabler ska påverka exekveringen av
sed :
LANG Ange ett standardvärde för internationaliseringen
variabler som är inställda eller null. (Se basen
Definitionsvolym för POSIX.1‐2017, avsnitt 8.2 , Internationaliseringsvariabler
för företräde för
internationaliseringsvariabler som används för att bestämma
värden för språkkategorier.)
LC_ALL Om inställt på ett icke-tomt strängvärde, åsidosätt värdena
av alla andra internationaliseringsvariabler.
LC_COLLATE
Bestäm lokalen för beteendet för intervall,
ekvivalensklasser och sammanställning av flera tecken
element i reguljära uttryck.
LC_CTYPE Bestäm lokalen för tolkningen av
sekvenser av byte med textdata som tecken (till
till exempel en-byte i motsats till multi-byte
tecken i argument och indatafiler), och
karaktärsklassers beteende inom vanliga
uttryck.
LC_MESSAGES
Bestäm lokalen som ska användas för att påverka
format och innehåll i diagnostiska meddelanden som skrivits till
standard fel.
NLSPATH Bestäm platsen för meddelandekataloger för
bearbetning av LC_MESSAGES .
ASYNKRONA HÄNDELSER
Standard.
STDOUT
Indatafilerna ska skrivas till standardutdata, med
redigeringskommandon som anges i det tillämpade skriptet. Om då
alternativet anges, endast de inmatningsrader som valts av
skriptet ska skrivas till standardutdata.
STDERR
Standardfelet ska endast användas för diagnostik och varning
meddelanden.
OUTPUT FILES
Utdatafilerna ska vara textfiler vars format är beroende
på de angivna redigeringskommandona.
Utökad BESKRIVNING
Skriptet ska bestå av redigeringskommandon av följande
form:
[ adress [ , adress ]] funktion
där funktion representerar ett kommandoverb från en enda tecken
listan i redigeringskommandon i sed följt av eventuella tillämpliga
argument.
Kommandot kan föregås av <blank> tecken och/eller
<semikolon> tecken. Funktionen kan föregås av <blank>
tecken. Dessa valfria tecken ska inte ha någon effekt.
I standarddrift ska sed cykliskt lägga till en rad med
in, minus dess avslutande <nylinje>-tecken, i mönstret
Plats. Läsning från indata ska hoppas över om en <nylinje> var inne
mönsterutrymmet före ett D -kommando som avslutar föregående cykel.
Sed- verktyget ska sedan tillämpa alla kommandon vars
adresser väljer det mönsterutrymmet tills ett kommando startar
nästa cykel eller slutar. Om inga kommandon uttryckligen startade en ny
cycle, sedan i slutet av skriptet ska mönsterutrymmet vara
kopieras till standardutdata (förutom när -n anges) och
mönsterutrymme ska tas bort. Närhelst mönsterutrymmet är
skrivs till standardutdata eller en namngiven fil, sed ska omedelbart
följ den med en <nylinje>.
Vissa av redigeringskommandona använder ett hållutrymme för att spara hela eller delar
av mönsterutrymmet för efterföljande hämtning. Mönstret och
hållutrymmen ska vart och ett kunna rymma minst 8192 byte.
Adresser i sed
En adress är antingen ett decimaltal som räknar inmatningsrader
kumulativt över filer, ett '$' -tecken som adresserar
sista inmatningsraden, eller en kontextadress (som består av en
BRE, som beskrivs i Regular Expressions in sed , föregick och
följt av en avgränsare, vanligtvis ett <snedstreck>).
Ett redigeringskommando utan adresser ska välja varje mönster
Plats.
Ett redigeringskommando med en adress ska välja varje mönster
utrymme som matchar adressen.
Ett redigeringskommando med två adresser ska välja inkluderande
intervall från det första mönsterutrymmet som matchar den första adressen
genom nästa mönsterutrymme som matchar det andra. (Om
andra adressen är ett nummer mindre än eller lika med radnumret
först väljs, endast en rad ska väljas.) Med början vid
första raden efter det valda intervallet ska sed leta efter igen
den första adressen. Därefter ska processen upprepas.
Utelämna ena eller båda av adresskomponenterna i
följande formulär ger odefinierade resultat:
[ adress [ , adress ]]
Reguljära uttryck i sed.
Sed- verktyget ska stödja de BRE som beskrivs i basen
Definitionsvolym för POSIX.1‐2017, avsnitt 9.3 , Grundläggande reguljära
uttryck , med följande tillägg:
* I en kontextadress, konstruktionen "\cBREc" , där c är
alla andra tecken än <backslash> eller <newline>, ska vara
identisk med "/BRE/" . Om karaktären som anges av c
visas efter ett <omvänt snedstreck>, så ska det beaktas
att vara den bokstavliga karaktären, som inte ska avsluta
BRE. Till exempel, i kontextadressen "\xabc\xdefx" , den
andra x står för sig själv, så att BRE är "abcxdef" .
* Escape-sekvensen '\n' ska matcha en <newline> inbäddad i
mönsterutrymmet. En bokstavlig <nylinje> ska inte användas i
BRE för en kontextadress eller i ersättningsfunktionen.
* Om en RE är tom (det vill säga inget mönster anges) sed
ska bete sig som om den senaste RE som användes i det sista kommandot
tillämpas (antingen som en adress eller som en del av ett substitut
kommando) specificerades.
Redigera kommandon i sed
I följande lista med redigeringskommandon är det maximala antalet
tillåtna adresser för varje funktion indikeras med [ 0addr ],
[ 1addr ] eller [ 2addr ], representerar noll, en eller två adresser.
Argumenttexten ska bestå av en eller flera rader . Varje
inbäddad <nylinje> i texten ska föregås av en
<omvänt snedstreck>. Andra <backslash>-tecken i text ska vara
tas bort, och följande tecken ska behandlas bokstavligt.
Kommandoverben r och w, och
w - flaggan till kommandot s , ta
en rfile (eller wfile ) parameter, separerad från kommandoverbet
bokstav eller flagga med ett eller flera <blanka> tecken; implementeringar
kan tillåta nollseparation som en förlängning.
Argumentet rfile eller argumentet wfile ska avsluta
redigeringskommando. Varje w-fil ska skapas före bearbetning
börjar. Implementeringarna ska stödja minst tio w-filer
argument i manuset; det faktiska antalet (större än eller lika
till 10) som stöds av implementeringen är ospecificerad.
Användningen av parametern wfile ska göra att filen blir det
ursprungligen skapat, om det inte finns, eller ska ersätta
innehållet i en befintlig fil.
Kommandoverben
b , r , s , t , w , y och : ska acceptera ytterligare
argument. Följande sammanfattningar anger vilka argument som ska
separeras från kommandoverben med ett enda <mellanslag>.
Kommandona a och r schemalägger text för senare utdata . Texten
specificerat för kommandot a och innehållet i filen
som anges för kommandot r , ska skrivas till standardutgång
strax före nästa försök att hämta en rad inmatning när
exekvera N eller n kommandon, eller när slutet av
manus. Om skrivet när man når slutet av manuset, och
-n alternativ specificerades inte, texten ska skrivas efter
kopiera mönsterrymden till standardutdata. Innehållet i
fil som anges för kommandot r ska vara från och med den tidpunkt då
output skrivs, inte tiden då r -kommandot tillämpas. De
text ska matas ut i den ordning som a och r kommandona
applicerades på ingången.
Andra redigeringskommandon än {...} , a , b , c , i , r , t , w , : , och #
kan följas av ett <semikolon>, valfria <blanka> tecken,
och ett annat redigeringskommando. Men när ett redigeringskommando
används med w- flaggan, efter den med ett annat kommando i
detta sätt ger odefinierade resultat.
En funktion kan föregås av ett '!' karaktär, i vilket fall
funktionen ska tillämpas om adresserna inte väljer
mönsterutrymme. Noll eller fler <blank> tecken accepteras
Innan '!' karaktär. Det är ospecificerat om <blank>
tecken kan följa "!" karaktär och överensstämmande
ansökningar ska inte följa "!" tecken med <tom>
tecken.
Om ett etikettargument (till ett b , t , eller : kommando) innehåller tecken
utanför den bärbara filnamnsteckenuppsättningen, eller om en etikett är
längre än 8 byte är beteendet ospecificerat. De
implementeringen ska stödja etikettargument som erkänns som unika
upp till minst 8 byte; den faktiska längden (större än eller lika
till 8) som stöds av implementeringen är ospecificerad. Det är
ospecificerat om den maximala etikettlängden som stöds överskrids
orsakar ett fel eller en tyst trunkering.
[ 2addr ] { redigeringskommando
redigeringskommando
...
} Kör en lista med sed- redigeringskommandon endast när
mönsterutrymme är valt. Listan över sed- redigering
kommandon ska omges av hängslen. Hängslen kan
föregås eller följs av <blank> tecken. De
<högerklammer> ska föregås av en <nylinje> eller
<semikolon> (före eventuella <blanka> tecken
före <högerklammer>).
Varje kommando i listan över kommandon ska vara
avslutas med ett <nylinje>-tecken, eller av en
<semikolon> tecken om tillåtet när kommandot är
används utanför hängslen. Redigeringskommandona kan vara
föregås av <blanka> tecken, men ska inte vara det
följt av <blank> tecken.
[ 1addr ]a\
text Skriv text till standardutdata som beskrivits tidigare.
[ 2addr ]b [ label ]
Förgrena sig till kommandot : verb som bär etikettargumentet
. Om etiketten inte anges, förgrena sig till slutet
av manuset.
[ 2addr ]c\
text Ta bort mönsterutrymmet. Med en 0 eller 1 adress eller på
i slutet av ett intervall med 2 adresser, placera text på utgången
och starta nästa cykel.
[ 2addr ]d Ta bort mönsterutrymmet och starta nästa cykel.
[ 2addr ]D Om mönsterrymden inte innehåller någon <nylinje>, ta bort
mönsterutrymme och starta en normal ny cykel som om d
kommando utfärdades. Annars tar du bort initialen
segment av mönsterrymden genom den första
<nylinje> och starta nästa cykel med resultatet
mönsterutrymme och utan att läsa någon ny inmatning.
[ 2addr ]g Byt ut innehållet i mönsterutrymmet med
innehållet i lastutrymmet.
[ 2addr ]G Lägg till en <nylinje> till mönsterrymden följt av
innehållet i lastutrymmet.
[ 2addr ]h Byt ut innehållet i hållutrymmet med
innehållet i mönsterutrymmet.
[ 2addr ]H Lägg till en <nylinje> till hållutrymmet följt av
innehållet i mönsterutrymmet.
[ 1addr ]i\
text Skriv text till standardutdata.
[ 2addr ]l (Bokstaven ell.) Skriv mönsterrymden till standard
produktion i en visuellt entydig form. Tecknen
listade i volymen Base Definitions av POSIX.1‐2017,
Tabell 5-1 , Escape-sekvenser och associerade åtgärder
( '\\' , '\a' , '\b' , '\f' , '\r' , '\t' , '\v') ska vara
skriven som motsvarande flyktsekvens; " \n"
i den tabellen är inte tillämplig. Ej utskrivbar
tecken som inte finns i den tabellen ska skrivas som ett
tresiffrigt oktalt nummer (med ett föregående <omvänt snedstreck>)
för varje byte i tecknet (mest signifikanta byte
först).
Långa linor ska vikas med vikpunkten
indikeras genom att skriva ett <omvänt snedstreck> följt av ett
<nylinje>; längden vid vilken vikning sker är
ospecificerad, men bör vara lämplig för utdata
enhet. Slutet på varje rad ska markeras med a
'$' .
[ 2addr ]n Skriv mönsterrymden till standardutdata om
standardutgången har inte undertryckts, och ersätt
mönsterutrymme med nästa inmatningsrad, minus dess
avslutar <nylinje>.
Om ingen nästa rad med inmatning är tillgänglig, kommandot n
verb ska förgrena sig till slutet av skriptet och avsluta
utan att starta en ny cykel.
[ 2addr ]N Lägg till nästa rad med inmatning, minus dess avslutning
<nylinje>, till mönsterrymden, med hjälp av en inbäddad
<newline> för att separera det bifogade materialet från
originalmaterial. Observera att det aktuella radnumret
ändringar.
Om ingen nästa rad med inmatning är tillgänglig, kommandot N
verb ska förgrena sig till slutet av skriptet och avsluta
utan att starta en ny cykel eller kopiera mönstret
utrymme till standardutgång.
[ 2addr ]p Skriv mönsterrymden till standardutdata.
[ 2addr ]P Skriv mönsterrymden, upp till den första <nyraden>, till
standardutgång.
[ 1addr ]q Förgrena sig till slutet av skriptet och avsluta utan
starta en ny cykel.
[ 1addr ]r rfil
Kopiera innehållet i rfil till standardutdata som
beskrivits tidigare. Om rfile inte finns eller inte kan
läsas, ska den behandlas som om den vore en tom
fil, vilket inte orsakar något feltillstånd.
[ 2addr ]s/ BRE / ersättning / flaggor
Ersätt ersättningssträngen med instanser av
BRE i mönsterrymden. Vilken karaktär som helst förutom
<backslash> eller <newline> kan användas istället för a
<slash> för att avgränsa BRE och ersättning. Inom
BRE och ersättning, själva BRE-avgränsaren
kan användas som ett bokstavligt tecken om det föregås av
ett <omvänt snedstreck>.
Ersättningssträngen ska skannas från början
att sluta. En <ampersand> ( '&' ) som visas i
ersättning ska ersättas av strängmatchning
BRE. Den speciella betydelsen av '&' i detta sammanhang kan
undertryckas genom att föregå den av ett <omvänt snedstreck>. De
tecknen "\ n" , där n är en siffra, ska ersättas
av texten som matchas av motsvarande bakåtreferens
uttryck. Om motsvarande bakåtreferens
uttrycket matchar inte, då tecknen "\ n"
ska ersättas av den tomma strängen. Den speciella
betydelsen av "\ n" där n är en siffra i detta sammanhang, kan
undertryckas genom att föregå den av ett <omvänt snedstreck>. För
varandra <backslash> stött på, följande
karaktär ska förlora sin speciella betydelse (om någon).
En rad kan delas upp genom att ersätta en <nylinje> i
Det. Ansökan ska undvika <newline> i
ersätt genom att föregå den av ett <omvänt snedstreck>.
Innebörden av en oescaped <backslash> omedelbart
följt av något annat tecken än '&' , <backslash>,
en siffra, <nylinje> eller avgränsningstecknet som används för
detta kommando är ospecificerat.
En substitution ska anses ha skett
utförs även om ersättningssträngen är identisk
till strängen som den ersätter. Alla <backslash> som används
ändra standardbetydelsen för ett efterföljande tecken
ska kasseras från BRE:n eller ersättningen
innan du utvärderar BRE eller använder ersättningen.
Värdet på flaggor ska vara noll eller mer av:
n Ersätter endast den n :e förekomsten av
BRE finns inom mönsterrymden.
g Globalt ersätter alla icke-överlappande
instanser av BRE snarare än bara
den första. Om både g och n anges,
resultaten är ospecificerade.
p Skriv mönsterrymden till standardutdata if
en ersättare gjordes.
w wfile Skriv. Lägg till mönsterutrymmet till wfile om en
byte gjordes. En överensstämmande
ansökan ska föregå wfil- argumentet
med ett eller flera <blanka> tecken. Om w
flaggan är inte det sista flaggvärdet som anges i a
sammanlänkning av flera flaggvärden, den
resultaten är odefinierade.
[ 2addr ]t [ label ]
Test. Förgrena sig till kommandot : verb som bär etiketten if
eventuella byten har gjorts sedan den senaste
läsning av en ingångsrad eller exekvering av ett t . Om etikett
är inte specificerad, förgrena sig till slutet av skriptet.
[ 2addr ]w wfile
Lägg till (skriv) mönsterrymden till wfile .
[ 2addr ]x Byt ut innehållet i mönstret och håll mellanrum.
[ 2addr ]y/ string1 / string2 /
Ersätt alla förekomster av tecken i sträng1 med
motsvarande tecken i string2 . Om en
<backslash> följt av ett 'n' visas i string1 eller
string2 , de två tecknen ska hanteras som en
singel <nylinje>. Om antalet tecken i
string1 och string2 är inte lika, eller om någon av de
tecken i sträng1 visas mer än en gång
resultaten är odefinierade. Vilken karaktär som helst förutom
<backslash> eller <newline> kan användas istället för <slash>
för att avgränsa strängarna. Om avgränsaren inte är 'n' ,
inom string1 och string2 kan själva avgränsaren vara
används som ett bokstavligt tecken om det föregås av en
<omvänt snedstreck>. Om ett <omvänt snedstreck> tecken är omedelbart
följt av ett <backslash>-tecken i string1 eller
string2 ska de två <backslash>-tecknen vara
räknas som ett enda bokstavligt <backslash>-tecken. De
betydelsen av ett <omvänt snedstreck> följt av ett tecken som
är inte 'n' , ett <omvänt snedstreck> eller avgränsningstecknet
är odefinierat.
[ 0addr ]: etikett
Gör ingenting. Detta kommando har en etikett som kommandona b
och t förgrenar sig till.
[ 1addr ]= Skriv följande till standardutdata:
"%d\n", < nuvarande radnummer >
[ 0addr ] Ignorera detta tomma kommando.
[ 0addr ]# Ignorera '#' och resten av raden (behandla
dem som en kommentar), med det enda undantaget att om
de två första tecknen i skriptet är "#n" , den
standardutgången ska undertryckas; detta ska vara
motsvarar att ange -n på kommandoraden.
EXIT STATUS
Följande utgångsvärden ska returneras:
0 Lyckad avslutning.
>0 Ett fel uppstod.
KONSEKVENSER AV FEL
Standard.
Följande avsnitt är informativa.
ANVÄNDNING APPLIKATION
Reguljära uttryck matchar hela strängar, inte bara enskilda
rader, men en <nylinje> matchas av '\n' i en sed RE; a
<newline> är inte tillåtet enligt den allmänna definitionen av vanlig
uttryck i POSIX.1‐2008. Observera också att '\n' inte kan användas till
matcha en <nylinje> i slutet av en godtycklig inmatningsrad;
<newline> tecken visas i mönsterrymden som ett resultat avredigeringskommandot
N. _
När du använder sed för att bearbeta sökvägsnamn, rekommenderas det
LC_ALL, eller åtminstone LC_CTYPE och LC_COLLATE, är inställda på POSIX eller
C i miljön, eftersom sökvägar kan innehålla bytesekvenser
som inte bildar giltiga tecken i vissa lokaler, i så fall
verktygets beteende skulle vara odefinierat. I POSIX-språket
varje byte är ett giltigt enkelbytetecken, och därför detta
problem undviks.
EXEMPEL
Detta sed -skript simulerar kommandot BSD cat -s , squeezing
överflödiga tomma rader från standardinmatning.
sed -n '
# Skriv rader som inte är tomma.
/./ {
sid
d
}
# Skriv en enda tom rad och leta sedan efter fler tomma rader.
/^$/ sid
# Hämta nästa rad, kassera den hållna <nylinjen> (tom rad),
# och leta efter fler tomma rader.
:Tömma
/^$/ {
N
s/.//
b Tom
}
# Skriv den icke-tomma raden innan du går tillbaka till sökningen
# för den första i en uppsättning tomma rader.
sid
'
Följande sed- kommando är en mycket enklare metod för att klämma
tomma rader, även om det inte är riktigt detsamma som katt -s eftersom det
tar bort alla initiala tomma rader:
sed -n '/./,/^$/p'
RATIONALE
Denna volym av POSIX.1‐2017 kräver implementeringar för att stödja
minst tio distinkta wfiler , matchande historisk praxis på
många implementeringar. Implementeringar uppmuntras att stödja
fler, men överensstämmande applikationer bör inte överskrida denna gräns.
Utgångsstatuskoderna som anges här skiljer sig från de i
System V. System V returnerar 2 för förvrängda sed- kommandon, men
returnerar noll med sitt användningsmeddelande eller om indatafilen kunde
inte öppnas. Standardutvecklarna ansåg att detta var en
insekt.
Det sätt på vilket l -kommandot skriver icke-utskrivbara tecken
ändrades för att undvika den historiska backspace-overstrike-metoden,
och andra krav för att uppnå entydiga resultat lades till.
Se MOTIVERING för ed(1p) för detaljer om det valda formatet,
vilket är samma som valts för sed .
Denna volym av POSIX.1‐2017 kräver implementeringar för att tillhandahålla
mönster och håll mellanslag på minst 8192 byte, större än
4000 byte utrymmen som används av vissa historiska implementeringar, men
mindre än gränsen på 20480 byte som användes i ett tidigt förslag.
Implementeringar uppmuntras att allokera dynamiskt större
mönster och håll utrymmen efter behov.
Kraven för godkännande av <blank> och <mellanslag> tecken
i kommandorader har gjorts mer explicit än i början
förslag för att tydligt beskriva den historiska praktiken och till
ta bort förvirring om frasen ``skydda initiala tomrum [ sic ]
och flikar från strippningen som görs på varje skriptrad''
som förekommer i mycket av den historiska dokumentationen av sed
bruksbeskrivning av text. (Alla implementeringar är inte kända
att ta bort <blanka> tecken från textrader, men
de har alla tillåtit inledande <blank> tecken före
adress på en kommandorad.)
Behandlingen av '#' kommentarer skiljer sig från SVID som endast
tillåter en kommentar som den första raden i skriptet, men matchar
BSD-härledda implementeringar. Kommentartecken behandlas som
ett kommando, och det har samma egenskaper när det gäller att vara
accepteras med inledande <blank> tecken; BSD-implementeringen
har historiskt stött detta.
Tidiga förslag krävde att en script_file hade minst en
icke-kommentarrad. Vissa historiska implementeringar har fungerat i
oväntade sätt om så inte var fallet. Standarden
utvecklare ansåg att detta var felaktigt beteende och det
applikationsutvecklare ska inte behöva undvika den här funktionen. A
korrekt implementering av denna volym av POSIX.1‐2017 ska
tillåt script_file s som endast består av kommentarsrader.
Tidiga förslag indikerade att om -e och -f alternativ var
blandade, alla -e- alternativ bearbetades före eventuella -f- alternativ.
Detta har ändrats för att behandla dem i den ordning som presenteras
eftersom det matchar historisk praxis och är mer intuitivt.
Behandlingen av p -flaggan till kommandot s skiljer sig mellan
System V och BSD-baserade system när standardutgången är
undertryckt. I de två exemplen:
echo a | sed 's/a/A/p'
echo a | sed -n 's/a/A/p'
denna volym av POSIX.1‐2017, BSD, System V-dokumentation och
SVID indikerar att det första exemplet ska skriva två rader med
A , medan den andra ska skriva en. Vissa System V-system
skriv A endast en gång i båda exemplen eftersom p -flaggan är
ignoreras om alternativet -n inte anges.
Detta är ett fall av en diametral skillnad mellan system som
kunde inte förenas genom kompromissen att förklara den
beteende vara ospecificerat. SVID/BSD/System V-dokumentationen
beteende antogs för denna volym av POSIX.1-2017 eftersom:
* Ingen känd dokumentation för något historiskt system beskriver
interaktion mellan p -flaggan och alternativet -n .
* Det valda beteendet är mer korrekt eftersom det inte finns något
teknisk motivering för eventuell interaktion mellan p
-flaggan och alternativet -n . Ett förhållande mellan -n och p
flaggan kan antyda att de bara används tillsammans, men detta
ignorerar giltiga skript som avbryter den cykliska karaktären av
bearbetningen genom användning av D , d , q , eller förgrening
kommandon. Sådana skript förlitar sig på p -suffixet för att skriva
mönsterutrymme eftersom de inte använder standarden
utdata längst ned i skriptet.
* Eftersom alternativet -n gör p -flaggan onödig, någon
interaktion skulle bara vara användbart om sed -skript skrevs
att köra både med och utan alternativet -n . Detta tror man
att vara osannolikt. Det är ännu mer osannolikt att programmerare
har kodat p -flaggan och förväntar sig att den är onödig. Därför att
interaktionen var inte dokumenterad, sannolikheten för en
programmerare upptäcker interaktionen och beroende på den är
minskat ytterligare.
* Slutligen, skript som går sönder under det angivna beteendet
producera för mycket produktion istället för för lite, dvs
lättare att diagnostisera och korrigera.
Formen för ersättningskommandot som använder suffixet n var
begränsat till de första 512 matcherna i ett tidigt förslag. Denna gräns
har tagits bort eftersom det inte finns någon anledning att en redaktör bearbetar
Rader med {LINE_MAX} längd bör ha denna begränsning. De
kommando s/a/A/2047 bör kunna ersätta 2047:e
förekomst av a på en linje.
Kommandona b , t och : är dokumenterade för att ignorera inledande vit
utrymme, men inget nämnts om efterföljande vitt utrymme. Historisk
implementeringar av sed tilldelade olika platser till etiketterna
"x" och "x" . Detta är inte användbart, och leder till subtila
programmeringsfel, men det är historisk praxis och förändras
det skulle teoretiskt kunna bryta fungerande skript. Implementatorer är
uppmuntras att tillhandahålla varningsmeddelanden om etiketter som är
aldrig refereras av ett b- eller t -kommando, hoppar till etiketter som inte gör det
existerar och markerar argument som är föremål för trunkering.
Tidigare versioner av denna standard möjliggjorde implementeringar
med andra bytes än åtta bitar, men detta har modifierats i
denna version.
FUTURE DIRECTIONS
Ingen.
SE ÄVEN
awk(1p) , ed(1p) , grep(1p) Basdefinitionsvolymen för POSIX.1‐2017, Tabell 5-1 , Escape Sequences and Associated Actions , Kapitel 8 , Miljövariabler , Avsnitt 9.3 , Grundläggande reguljära uttryck , Avsnitt 12.2 , Riktlinjer för verktygssyntax
COPYRIGHT
Delar av denna text är omtryckta och reproducerade i elektronisk form
blankett från IEEE Std 1003.1-2017, Standard for Information
Teknik -- Portable Operating System Interface (POSIX), The
Open Group Base Specifications Issue 7, 2018 Edition, Copyright
(C) 2018 av Institutet för el och elektronik
Engineers, Inc och The Open Group. Vid ev
diskrepans mellan denna version och den ursprungliga IEEE och The
Open Group Standard, den ursprungliga IEEE och The Open Group
Standard är referensdokumentet. Den ursprungliga standarden kan vara
fås online på http://www.opengroup.org/unix/online.html .
Eventuella typografiska eller formateringsfel som visas på den här sidan
mest sannolikt har införts under omvandlingen av
källfilerna till man page-format. För att rapportera sådana fel, se
https://www.kernel.org/doc/man-pages/reporting_bugs.html .
IEEE/The Open Group 2017 SED (1P)
Se Också