sed(1p): Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
(Skapade sidan med 'Jag gör om HTML-innehållet du klistrade in till MediaWiki-format, med samma stil som dina tidigare man-sida-översättningar: `==`-rubriker, `<pre>` för kodblock, och interna länkar i “SE ÄVEN”. == PROLOG == <pre> Den här manualsidan är en del av POSIX Programmer's Manual. Linux- implementationen av detta gränssnitt kan skilja sig (konsultera motsvarande Linux-manualsida för detaljer om Linux-beteende), eller så kan gränssnittet saknas i Linux. </pre>...')
 
 
(4 mellanliggande sidversioner av samma användare visas inte)
Rad 1: Rad 1:
Jag gör om HTML-innehållet du klistrade in till MediaWiki-format, med samma stil som dina tidigare man-sida-översättningar: `==`-rubriker, `<pre>` för kodblock, och interna länkar i “SE ÄVEN”.
= sed(1p) =
 


== PROLOG ==
== PROLOG ==


<pre>
Denna manualsida är en del av POSIX Programmer's Manual. Linux-implementationen av detta gränssnitt kan skilja sig (konsultera motsvarande Linux-manualsida för detaljer om Linux-beteende), eller så kanske gränssnittet inte är implementerat på Linux.
Den här manualsidan är en del av POSIX Programmer's Manual. Linux-
implementationen av detta gränssnitt kan skilja sig (konsultera motsvarande
Linux-manualsida för detaljer om Linux-beteende), eller så kan gränssnittet
saknas i Linux.
</pre>


== NAMN ==
== NAMN ==


<pre>
'''sed''' — strömredigerare
sed — strömredigerare
</pre>


== SYNOPSIS ==
== SYNOPSIS ==
Rad 29: Rad 21:
== BESKRIVNING ==
== BESKRIVNING ==


<pre>
Verktyget ''sed'' är en strömredigerare som läser en eller flera textfiler, gör redigeringsändringar enligt ett skript med redigeringskommandon och skriver resultatet till standardutmatning. Skriptet hämtas antingen från operandsträngen ''script'' eller från en kombination av optionsargumenten från alternativen '''-e''' ''script'' och '''-f''' ''script_file''.
Verktyget sed är en strömredigerare som läser en eller flera textfiler,
gör redigeringsändringar enligt ett skript av redigeringskommandon, och
skriver resultatet till standardutmatning. Skriptet hämtas antingen från
operandsträngen script eller från en kombination av option-argumenten för
alternativen -e script och -f script_file.
</pre>


== ALTERNATIV ==
== FLAGGOR ==


<pre>
Verktyget ''sed'' ska följa Base Definitions-delen av POSIX.1-2017, avsnitt 12.2, ''Utility Syntax Guidelines'', med undantag för att presentationsordningen för alternativen '''-e''' och '''-f''' är betydelsefull.
Verktyget sed ska följa Base Definitions-volymen i POSIX.1-2017,
Avsnitt 12.2, Utility Syntax Guidelines, med undantag att ordningen
mellan alternativen -e och -f är signifikant.


Följande alternativ ska stödjas:
Följande alternativ ska stödjas:


-e script
'''''-e''''' ''script''
        Lägg till de redigeringskommandon som anges av option-argumentet
: Lägg till redigeringskommandona som anges av optionsargumentet ''script'' sist i skriptet av redigeringskommandon.
        script till slutet av skriptet med redigeringskommandon.


-f script_file
'''''-f''''' ''script_file''
        Lägg till de redigeringskommandon som finns i filen script_file
: Lägg till redigeringskommandona i filen ''script_file'' sist i skriptet av redigeringskommandon.
        till slutet av skriptet med redigeringskommandon.


-n
'''''-n'''''
        Undertryck standardutmatningen (där varje rad, efter att den
: Undertryck standardutmatningen (där varje rad, efter att den undersökts för redigering, skrivs till standardutmatning). Endast rader som uttryckligen valts för utmatning skrivs.
        granskats för redigering, skrivs till standardutmatning).
        Endast rader som explicit väljs för utmatning skrivs.


Om några -e- eller -f-alternativ anges ska skriptet med redigeringskommandon
Om någon '''-e'''- eller '''-f'''-flagga anges ska skriptet av redigeringskommandon initialt vara tomt. Kommandona som anges av varje '''-e''' eller '''-f''' läggs till i den ordning de anges. När varje tillägg görs ska, om föregående tillägg (om något) kom från en '''-e'''-flagga, ett <newline> infogas före det nya tillägget. Det resulterande skriptet ska ha samma egenskaper som operanden ''script'', beskrivet i avsnittet OPERANDER.
initialt vara tomt. Kommandona som anges av varje -e- eller -f-alternativ
ska läggas till skriptet i den ordning de anges. När varje tillägg görs
ska, om föregående tillägg (om något) kom från ett -e-alternativ, ett
<newline> infogas före det nya tillägget. Det resulterande skriptet ska ha
samma egenskaper som operanden script, beskriven i avsnittet OPERANDER.
</pre>


== OPERANDER ==
== OPERANDER ==


<pre>
Följande operander ska stödjas:
Följande operander ska stödjas:


file
''file''
        En sökväg till en fil vars innehåll läses och redigeras.
: En sökväg till en fil vars innehåll läses och redigeras. Om flera ''file''-operander anges ska de namngivna filerna läsas i den ordning de anges och sammanfogningen redigeras. Om inga ''file''-operander anges ska standardinmatningen användas.
        Om flera file-operander anges ska de namngivna filerna läsas i den
        ordning som anges och sammanfogningen ska redigeras. Om inga
        file-operander anges ska standard in användas.


script
''script''
        En sträng som ska användas som skriptet med redigeringskommandon.
: En sträng som ska användas som skript av redigeringskommandon. Applikationen ska inte presentera ett ''script'' som bryter mot begränsningarna för en textfil, förutom att sista tecknet inte behöver vara ett <newline>.
        Applikationen ska inte presentera ett script som bryter mot
        begränsningarna för en textfil, med undantag att sista tecknet
        inte behöver vara ett <newline>.
</pre>


== STDIN ==
== STDIN ==


<pre>
Standardinmatningen ska användas om inga ''file''-operander anges, och ska användas om en ''file''-operand är ''''-''' och implementationen behandlar ''''-''' som standardinmatning. Annars ska standardinmatningen inte användas. Se avsnittet INDATAFILER.
Standard in ska användas om inga file-operander anges, och ska användas om
en file-operand är '-' och implementationen behandlar '-' som att det betyder
standard in. Annars ska standard in inte användas. Se avsnittet INPUT FILES.
</pre>


== INPUT FILES ==
== INDATAFILER ==


<pre>
Indatafilerna ska vara textfiler. ''script_file'' som namnges av '''-f''' ska bestå av redigeringskommandon.
Indatafilerna ska vara textfiler. script_file:erna som namnges av
alternativet -f ska bestå av redigeringskommandon.
</pre>


== MILJÖVARIABLER ==
== MILJÖVARIABLER ==


<pre>
Följande miljövariabler påverkar exekveringen av ''sed'':
Följande miljövariabler ska påverka körningen av sed:


LANG
''LANG''
        Tillhandahåll ett standardvärde för internationaliseringsvariabler
: Ger ett standardvärde för internationaliseringsvariabler som är osatta eller tomma. (Se Base Definitions-delen av POSIX.1-2017, avsnitt 8.2, ''Internationalization Variables'' för prioriteringsordningen.)
        som är odefinierade eller tomma. (Se Base Definitions-volymen i
        POSIX.1-2017, Avsnitt 8.2, Internationalization Variables för
        prioritet mellan internationaliseringsvariabler som används för att
        bestämma värden för locale-kategorier.)


LC_ALL
''LC_ALL''
        Om satt till en icke-tom sträng, åsidosätt värdena för alla andra
: Om satt till en icke-tom sträng åsidosätter den värdena för alla andra internationaliseringsvariabler.
        internationaliseringsvariabler.


LC_COLLATE
''LC_COLLATE''
        Bestäm locale för beteendet hos intervall, ekvivalensklasser och
: Bestämmer lokal för beteendet hos intervall, ekvivalensklasser och flerteckens-kollationselement i reguljära uttryck.
        flerteckens kollationselement inom reguljära uttryck.


LC_CTYPE
''LC_CTYPE''
        Bestäm locale för tolkning av sekvenser av byte av textdata som
: Bestämmer lokal för tolkning av bytesekvenser i textdata som tecken (t.ex. enkelbyte vs. multibyte i argument och indatafiler), samt beteende för teckenklasser i reguljära uttryck.
        tecken (t.ex. enkelbyte kontra multibyte-tecken i argument och
        indatafiler), och beteendet hos teckenklasser inom reguljära
        uttryck.


LC_MESSAGES
''LC_MESSAGES''
        Bestäm locale som ska användas för att påverka format och innehåll i
: Bestämmer lokal som ska användas för format och innehåll i diagnostiska meddelanden skrivna till standardfel.
        diagnostiska meddelanden som skrivs till standard error.


NLSPATH
''NLSPATH''
        Bestäm platsen för meddelandekataloger för bearbetning av LC_MESSAGES.
: Bestämmer plats för meddelandekataloger vid bearbetning av ''LC_MESSAGES''.
</pre>


== ASYNKRONA HÄNDELSER ==
== ASYNKRONA HÄNDELSER ==


<pre>
Standard.
Standard.
</pre>


== STDOUT ==
== STDOUT ==


<pre>
Indatafilerna ska skrivas till standardutmatning, med redigeringskommandona i skriptet tillämpade. Om '''-n''' anges ska endast de indatarader som väljs av skriptet skrivas till standardutmatning.
Indatafilerna ska skrivas till standardutmatning, med redigeringskommandona i
skriptet tillämpade. Om alternativet -n anges ska endast de indatarader som
väljs av skriptet skrivas till standardutmatning.
</pre>


== STDERR ==
== STDERR ==


<pre>
Standardfel ska endast användas för diagnostik- och varningsmeddelanden.
Standard error ska endast användas för diagnostik- och varningsmeddelanden.
 
</pre>
== UTFILER ==
 
Utdatafilerna ska vara textfiler vars format beror på de angivna redigeringskommandona.
 
== UTVIDGAD BESKRIVNING ==


== OUTPUT FILES ==
Skriptet ''script'' ska bestå av redigeringskommandon på följande form:


<pre>
<pre>
Utdatafilerna ska vara textfiler vars format beror på de redigeringskommandon
[address[,address]]function
som ges.
</pre>
</pre>


== UTVIDGAD BESKRIVNING ==
där ''function'' representerar ett kommandoverb med ett tecken från listan i ''Editing Commands in sed'', följt av eventuella argument.
 
Kommandot kan föregås av <blank>-tecken och/eller <semicolon>-tecken. Funktionen kan föregås av <blank>-tecken. Dessa valfria tecken ska inte ha någon effekt.


<pre>
Vid standardkörning ska ''sed'' cykliskt lägga till en indatarad, utan dess avslutande <newline>-tecken, i mönsterutrymmet (pattern space). Inläsning från indata ska hoppas över om ett <newline> fanns i mönsterutrymmet före ett '''D'''-kommando som avslutade föregående cykel. ''sed'' ska därefter tillämpa, i ordning, alla kommandon vars adresser väljer det mönsterutrymmet, tills ett kommando startar nästa cykel eller avslutar. Om inga kommandon uttryckligen startade en ny cykel ska, vid slutet av skriptet, mönsterutrymmet kopieras till standardutmatning (utom när '''-n''' anges) och mönsterutrymmet ska raderas. När mönsterutrymmet skrivs till standardutmatning eller en namngiven fil ska ''sed'' omedelbart följa det med ett <newline>.
script ska bestå av redigeringskommandon av följande form:


    [address[,address]]function
Vissa redigeringskommandon använder ett hållutrymme (hold space) för att spara hela eller delar av mönsterutrymmet för senare hämtning. Mönster- och hållutrymmen ska vart och ett kunna hålla minst 8192 byte.


där function representerar ett enstaka kommandotecken från listan i
=== Adresser i sed ===
Editing Commands in sed, följt av eventuella tillämpliga argument.


Kommandot kan föregås av <blank>-tecken och/eller <semicolon>-tecken.
En adress är antingen ett decimaltal som räknar indatarader kumulativt över filer, tecknet ''''$''' som adresserar sista indataraden, eller en kontextadress (som består av ett BRE, beskrivet i ''Regular Expressions in sed'', föregånget och följt av en avgränsare, vanligen ett <slash>).
Function kan föregås av <blank>-tecken. Dessa valfria tecken ska inte ha
någon effekt.


Vid standarddrift ska sed cykliskt lägga till en indatarad, utan dess
Ett redigeringskommando utan adresser ska välja varje mönsterutrymme.
avslutande <newline>-tecken, i mönsterutrymmet (pattern space). Läsning från
indata ska hoppas över om ett <newline> fanns i mönsterutrymmet före ett D-
kommando som avslutade föregående cykel. sed ska därefter i ordning tillämpa
alla kommandon vars adresser väljer det mönsterutrymmet, tills ett kommando
startar nästa cykel eller avslutar. Om inga kommandon explicit startade en
ny cykel ska, vid slutet av skriptet, mönsterutrymmet kopieras till
standardutmatning (utom när -n anges) och mönsterutrymmet ska raderas.
Närhelst mönsterutrymmet skrivs till standardutmatning eller en namngiven fil
ska sed omedelbart följa det med ett <newline>.


Vissa redigeringskommandon använder ett hållutrymme (hold space) för att
Ett redigeringskommando med en adress ska välja varje mönsterutrymme som matchar adressen.
spara hela eller delar av mönsterutrymmet för senare hämtning. Mönster- och
hållutrymme ska vart och ett kunna hålla minst 8192 byte.


Addresses in sed
Ett redigeringskommando med två adresser ska välja det inklusiva intervallet från första mönsterutrymmet som matchar första adressen, till och med nästa mönsterutrymme som matchar den andra. (Om den andra adressen är ett tal mindre än eller lika med radnumret för första valda raden ska endast en rad väljas.) Från första raden efter det valda intervallet ska ''sed'' åter leta efter första adressen och upprepa processen. Att utelämna endera eller båda adressdelarna i följande form ger odefinierat resultat:
    En adress är antingen ett decimaltal som räknar indatarader kumulativt
    över filer, ett '$'-tecken som adresserar sista indataraden, eller en
    kontextadress (som består av ett BRE, enligt Regular Expressions in sed,
    föregånget och följt av en avgränsare, vanligtvis <slash>).


    Ett redigeringskommando utan adresser ska välja varje mönsterutrymme.
<pre>
[address[,address]]
</pre>


    Ett redigeringskommando med en adress ska välja varje mönsterutrymme som
=== Reguljära uttryck i sed ===
    matchar adressen.


    Ett redigeringskommando med två adresser ska välja det inkluderande
''sed'' ska stödja de BRE som beskrivs i Base Definitions-delen av POSIX.1-2017, avsnitt 9.3, ''Basic Regular Expressions'', med följande tillägg:
    intervallet från det första mönsterutrymmet som matchar första adressen
    till och med nästa mönsterutrymme som matchar den andra adressen. (Om den
    andra adressen är ett tal mindre än eller lika med det först valda
    radnumret ska endast en rad väljas.) Från och med första raden efter det
    valda intervallet ska sed återigen söka efter första adressen. Därefter
    upprepas processen. Att utelämna en eller båda adressdelarna i följande
    form ger odefinierade resultat:


        [address[,address]]
* I en kontextadress ska konstruktionen <pre>"\cBREc"</pre> där ''c'' är valfritt tecken utom <backslash> eller <newline>, vara identisk med <pre>"/BRE/"</pre>. Om tecknet som betecknas av ''c'' förekommer efter en <backslash> ska det betraktas som ett bokstavligt tecken som inte terminerar BRE. Exempel: i kontextadressen <pre>"\xabc\xdefx"</pre> står det andra ''x'' för sig självt, så BRE blir <pre>"abcxdef"</pre>.


Regular Expressions in sed
* Escape-sekvensen <pre>'\n'</pre> ska matcha ett inbäddat <newline> i mönsterutrymmet. En bokstavlig <newline> ska inte användas i BRE för en kontextadress eller i substitueringsfunktionen.
    sed ska stödja de BRE:er som beskrivs i Base Definitions-volymen i
    POSIX.1-2017, Avsnitt 9.3, Basic Regular Expressions, med följande
    tillägg:


    * I en kontextadress ska konstruktionen "\cBREc", där c är ett tecken
* Om ett RE är tomt (dvs. inget mönster anges) ska ''sed'' bete sig som om senaste RE som användes i senaste tillämpade kommandot (antingen som adress eller del av ett substitueringskommando) angavs.
        annat än <backslash> eller <newline>, vara identisk med "/BRE/".
        Om tecknet c förekommer efter ett <backslash> ska det betraktas som
        det literal-tecknet och ska inte avsluta BRE:t. Exempel: i
        kontextadressen "\xabc\xdefx" står det andra x för sig själv, så BRE:t
        är "abcxdef".


    *  Escape-sekvensen '\n' ska matcha ett <newline> inbäddat i
=== Redigeringskommandon i sed ===
        mönsterutrymmet. Ett literal <newline> ska inte användas i BRE:t för
        en kontextadress eller i substitueringsfunktionen.


    *  Om ett RE är tomt (dvs. inget mönster anges) ska sed bete sig som om
I följande lista över redigeringskommandon anges det maximala antalet tillåtna adresser för varje funktion med [0addr], [1addr] eller [2addr].
        det sista RE som användes i det senast tillämpade kommandot (antingen
        som adress eller som del av ett substitueringskommando) var angivet.


Editing Commands in sed
Argumentet ''text'' ska bestå av en eller flera rader. Varje inbäddat <newline> i texten ska föregås av en <backslash>. Andra <backslash>-tecken i texten ska tas bort och följande tecken behandlas bokstavligt.
    I följande lista av redigeringskommandon anges maximalt antal tillåtna
    adresser för varje function med [0addr], [1addr] eller [2addr].


    Argumentet text ska bestå av en eller flera rader. Varje inbäddat
Kommandoverben '''r''' och '''w''', samt ''w''-flaggan till '''s'''-kommandot, tar en parameter ''rfile'' (eller ''wfile''), separerad från kommandobokstaven/flaggan med ett eller flera <blank>-tecken; implementationer kan tillåta noll separation som en utökning.
    <newline> i text ska föregås av ett <backslash>. Andra <backslash>-tecken
    i text ska tas bort och efterföljande tecken ska behandlas bokstavligt.


    Kommandotecknen r och w, samt w-flaggan till s-kommandot, tar en rfile
Argumentet ''rfile'' eller ''wfile'' ska avsluta redigeringskommandot. Varje ''wfile'' ska skapas innan bearbetning börjar. Implementationer ska stödja minst tio ''wfile''-argument i skriptet; det faktiska antalet (≥10) är ospecificerat. Användning av ''wfile'' ska skapa filen initialt om den inte finns, eller ersätta innehållet i en befintlig fil.
    (eller wfile)-parameter, separerad från kommandotecknet eller flaggan av
    ett eller flera <blank>-tecken; implementationer kan tillåta noll
    separation som en utökning.


    Argumentet rfile eller wfile ska avsluta redigeringskommandot. Varje
Kommandoverben '''b''', '''r''', '''s''', '''t''', '''w''', '''y''' och ''' : ''' ska acceptera ytterligare argument. Följande synopsis anger vilka argument som ska separeras från kommandobokstaven med ett enda <space>.
    wfile ska skapas innan bearbetning börjar. Implementationer ska stödja
    minst tio wfile-argument i skriptet; det faktiska antalet (>= 10) är
    ospecificerat. Parametern wfile ska göra att filen initialt skapas om
    den inte finns, eller ersätta innehållet i en befintlig fil.


    Kommandotecknen b, r, s, t, w, y och : ska acceptera ytterligare
Kommandona '''a''' och '''r''' schemalägger text för senare utmatning. Texten för '''a''' och innehållet i filen för '''r''' ska skrivas till standardutmatning precis före nästa försök att hämta en indatarad vid exekvering av '''N''' eller '''n''', eller när skriptet tar slut. Om detta sker vid slutet av skriptet och '''-n''' inte angetts, ska texten skrivas efter att mönsterutrymmet kopierats till standardutmatning. Innehållet i filen för '''r''' ska vara som vid tiden då utmatningen skrivs, inte när '''r'''-kommandot tillämpas. Texten ska matas ut i den ordning som '''a''' och '''r''' tillämpades på indata.
    argument. Följande synopser anger vilka argument som ska separeras från
    kommandotecknen med ett enkelt <space>.


    Kommandona a och r schemalägger text för senare utmatning. Texten som
Redigeringskommandon andra än '''{...}''', '''a''', '''b''', '''c''', '''i''', '''r''', '''t''', '''w''', ''':''', och '''#''' kan följas av ett <semicolon>, valfria <blank>-tecken och ett annat redigeringskommando. Men om ett '''s'''-kommando används med ''w''-flaggan ger det odefinierat resultat att följa det av ett annat kommando detta sätt.
    anges för a-kommandot, och innehållet i filen som anges för r-kommandot,
    ska skrivas till standardutmatning precis före nästa försök att hämta en
    indatarad när N- eller n-kommandona körs, eller när slutet av skriptet
    nås. Om det skrivs när slutet av skriptet nås och -n-alternativet inte
    angavs ska texten skrivas efter att mönsterutrymmet kopierats till
    standardutmatning. Innehållet i filen som anges för r-kommandot ska vara
    som vid tidpunkten då utmatningen skrivs, inte när r-kommandot tillämpas.
    Texten ska matas ut i den ordning som a- och r-kommandona tillämpades
    indatat.


    Redigeringskommandon andra än {...}, a, b, c, i, r, t, w, :, och # kan
En funktion kan föregås av tecknet '''!''', i vilket fall funktionen ska tillämpas om adresserna inte väljer mönsterutrymmet. Noll eller fler <blank>-tecken ska accepteras före '''!'''. Det är ospecificerat om <blank>-tecken kan följa '''!''', och konforma applikationer ska inte följa '''!''' med <blank>-tecken.
    följas av ett <semicolon>, valfria <blank>-tecken, och ett annat
    redigeringskommando. Men när ett s-redigeringskommando används med w-
    flaggan ger det odefinierade resultat att följa det med ett annat
    kommando på detta sätt.


    En function kan föregås av ett '!' i vilket fall funktionen ska tillämpas
Om ett ''label''-argument (till '''b''', '''t''' eller ''' : ''') innehåller tecken utanför den portabla filnamnsteckenuppsättningen, eller om ''label'' är längre än 8 byte, är beteendet ospecificerat. Implementationer ska stödja ''label''-argument som är unika åtminstone upp till 8 byte; den faktiska längden (≥8) som stöds är ospecificerad. Det är ospecificerat om överskridande av maximal label-längd orsakar fel eller tyst trunkering.
    om adresserna inte väljer mönsterutrymmet. Noll eller fler <blank>-tecken
    accepteras före '!' . Det är ospecificerat om <blank>-tecken kan följa
    efter '!' och konforma applikationer ska inte följa '!' med <blank>.


    Om ett label-argument (till b, t eller : ) innehåller tecken utanför den
Nedan följer kommandon (som i originaltexten), med adressklass i hakparentes:
    portabla filnamnsteckenmängden, eller om label är längre än 8 byte, är
    beteendet ospecificerat. Implementationer ska stödja label-argument som
    känns igen som unika upp till minst 8 byte; den faktiska längden (>= 8)
    är ospecificerad. Det är ospecificerat om överskridande av maximal
    label-längd orsakar fel eller tyst trunkering.


<pre>
[2addr] {
[2addr] {
editing command
editing command
editing command
...
...
}
}
        Kör en lista av sed-redigeringskommandon endast när mönsterutrymmet
</pre>
        är valt. Listan omges av klamrar. Klamrarna kan föregås eller följas
        av <blank>. <right-brace> ska föregås av <newline> eller <semicolon>
        (före eventuella valfria <blank> som föregår <right-brace>).


        Varje kommando i listan ska avslutas av <newline> eller av ett
'''''[2addr] {'''''
        <semicolon> om det är tillåtet när kommandot används utanför
: Exekvera en lista av ''sed''-kommandon endast när mönsterutrymmet väljs. Listan ska omges av klamrar. Klamrarna kan föregås eller följas av <blank>-tecken. <right-brace> ska föregås av <newline> eller <semicolon> (före eventuella <blank>-tecken före <right-brace>). Varje kommando i listan ska avslutas av <newline> eller av <semicolon> om det är tillåtet utanför klamrarna. Kommandon kan föregås av <blank>-tecken men ska inte följas av <blank>-tecken.
        klamrarna. Kommandon kan föregås av <blank>, men ska inte följas av
        <blank>.


<pre>
[1addr]a\
[1addr]a\
text
text
        Skriv text till standardutmatning som beskrivits ovan.
</pre>


'''''[1addr]a'''''
: Skriv text till standardutmatning som beskrivet ovan.
<pre>
[2addr]b [label]
[2addr]b [label]
        Hoppa (branch) till : kommandotecknet med label-argumentet. Om label
</pre>
        inte anges, hoppa till slutet av skriptet.


'''''[2addr]b [label]'''''
: Förgrena till kommandot ''':''' som bär argumentet ''label''. Om ''label'' inte anges, förgrena till slutet av skriptet.
<pre>
[2addr]c\
[2addr]c\
text
text
        Radera mönsterutrymmet. Med 0 eller 1 adress eller vid slutet av ett
</pre>
        2-adressintervall: skriv text till utmatningen och starta nästa cykel.


[2addr]d
'''''[2addr]c'''''
        Radera mönsterutrymmet och starta nästa cykel.
: Radera mönsterutrymmet. Med 0 eller 1 adress eller vid slutet av ett 2-adressintervall, lägg ''text'' på utmatningen och starta nästa cykel.


[2addr]D
'''''[2addr]d'''''
        Om mönsterutrymmet inte innehåller något <newline>, radera
: Radera mönsterutrymmet och starta nästa cykel.
        mönsterutrymmet och starta en normal ny cykel som om d körts. Annars:
        radera det initiala segmentet genom första <newline>, och starta nästa
        cykel med återstående mönsterutrymme utan att läsa ny indata.


[2addr]g
'''''[2addr]D'''''
        Ersätt innehållet i mönsterutrymmet med innehållet i hållutrymmet.
: Om mönsterutrymmet inte innehåller <newline>, radera mönsterutrymmet och starta en normal ny cykel som om '''d'''-kommandot givits. Annars: radera det initiala segmentet av mönsterutrymmet genom första <newline> och starta nästa cykel med återstående mönsterutrymme utan att läsa ny indata.


[2addr]G
'''''[2addr]g'''''
        Lägg till i mönsterutrymmet ett <newline> följt av innehållet i
: Ersätt innehållet i mönsterutrymmet med innehållet i hållutrymmet.
        hållutrymmet.


[2addr]h
'''''[2addr]G'''''
        Ersätt innehållet i hållutrymmet med innehållet i mönsterutrymmet.
: Lägg till i mönsterutrymmet ett <newline> följt av innehållet i hållutrymmet.


[2addr]H
'''''[2addr]h'''''
        Lägg till i hållutrymmet ett <newline> följt av innehållet i
: Ersätt innehållet i hållutrymmet med innehållet i mönsterutrymmet.
        mönsterutrymmet.


'''''[2addr]H'''''
: Lägg till i hållutrymmet ett <newline> följt av innehållet i mönsterutrymmet.
<pre>
[1addr]i\
[1addr]i\
text
text
        Skriv text till standardutmatning.
</pre>


[2addr]l
'''''[1addr]i'''''
        (Bokstaven l.) Skriv mönsterutrymmet till standardutmatning i en
: Skriv ''text'' till standardutmatning.
        visuellt entydig form. Tecknen listade i Base Definitions-volymen i
        POSIX.1-2017, Tabell 5-1, Escape Sequences and Associated Actions
        ('\\', '\a', '\b', '\f', '\r', '\t', '\v') ska skrivas som motsvarande
        escape-sekvens; '\n' i tabellen är inte tillämplig. Icke-utskrivbara
        tecken som inte finns i tabellen ska skrivas som ett tresiffrigt
        oktaltal (med föregående <backslash>) för varje byte i tecknet (mest
        signifikanta byte först).


        Långa rader ska vikas, med vikpunkten markerad genom att skriva ett
'''''[2addr]l''''' (bokstaven ell)
        <backslash> följt av ett <newline>; längden där vikning sker är
: Skriv mönsterutrymmet till standardutmatning i en visuellt entydig form. Tecknen i POSIX.1-2017 Base Definitions, Tabell 5-1, ''Escape Sequences and Associated Actions'' ('''\''', '''\a''', '''\b''', '''\f''', '''\r''', '''\t''', '''\v''') ska skrivas som motsvarande escape-sekvens; '''\n''' i tabellen är inte tillämpligt. Icke-utskrivbara tecken som inte finns i tabellen ska skrivas som ett tresiffrigt oktaltal (med föregående <backslash>) för varje byte i tecknet (mest signifikanta byte först). Långa rader ska vikas, där vikpunkten markeras genom att skriva en <backslash> följt av <newline>; längden där vikning sker är ospecificerad men bör vara lämplig för utdataenheten. Slutet av varje rad markeras med '''$'''.
        ospecificerad, men bör vara lämplig för utdataenheten. Slutet av varje
        rad ska markeras med ett '$'.


[2addr]n
'''''[2addr]n'''''
        Skriv mönsterutrymmet till standardutmatning om standardutmatning inte
: Skriv mönsterutrymmet till standardutmatning om standardutmatningen inte undertryckts och ersätt mönsterutrymmet med nästa indatarad utan dess avslutande <newline>. Om ingen nästa indatarad finns ska '''n''' förgrena till slutet av skriptet och avsluta utan att starta en ny cykel.
        undertryckts, och ersätt mönsterutrymmet med nästa indatarad, utan
        dess avslutande <newline>.


        Om ingen nästa indatarad finns ska n hoppa till slutet av skriptet och
'''''[2addr]N'''''
        avsluta utan att starta en ny cykel.
: Lägg till nästa indatarad utan dess avslutande <newline> till mönsterutrymmet, med ett inbäddat <newline> som separator. Observera att aktuellt radnummer ändras. Om ingen nästa indatarad finns ska '''N''' förgrena till slutet av skriptet och avsluta utan att starta ny cykel eller kopiera mönsterutrymmet till standardutmatning.


[2addr]N
'''''[2addr]p'''''
        Lägg till nästa indatarad, utan dess avslutande <newline>, till
: Skriv mönsterutrymmet till standardutmatning.
        mönsterutrymmet, med ett inbäddat <newline> som separator mellan den
        tillagda delen och den ursprungliga. Observera att aktuellt radnummer
        ändras.


        Om ingen nästa indatarad finns ska N hoppa till slutet av skriptet och
'''''[2addr]P'''''
        avsluta utan att starta en ny cykel eller kopiera mönsterutrymmet till
: Skriv mönsterutrymmet, fram till första <newline>, till standardutmatning.
        standardutmatning.


[2addr]p
'''''[1addr]q'''''
        Skriv mönsterutrymmet till standardutmatning.
: Förgrena till slutet av skriptet och avsluta utan att starta en ny cykel.


[2addr]P
'''''[1addr]r rfile'''''
        Skriv mönsterutrymmet upp till första <newline> till standardutmatning.
: Kopiera innehållet i ''rfile'' till standardutmatning som beskrivet ovan. Om ''rfile'' inte finns eller inte kan läsas ska den behandlas som en tom fil utan fel.


[1addr]q
'''''[2addr]s/BRE/replacement/flags'''''
        Hoppa till slutet av skriptet och avsluta utan att starta en ny cykel.
: Ersätt ''replacement'' för förekomster av BRE i mönsterutrymmet. Valfritt tecken (utom <backslash> eller <newline>) kan användas istället för <slash> som avgränsare. Inom BRE och replacement kan avgränsartecknet användas bokstavligt om det föregås av <backslash>.


[1addr]r rfile
: Replacement-strängen skannas från början till slut. Ett <ampersand> ('''&''') i replacement ersätts av strängen som matchar BRE. Denna specialbetydelse kan undertryckas med <backslash> före '''&'''. Tecknen <pre>"\n"</pre> där ''n'' är en siffra ersätts av texten som matchas av motsvarande bakreferens. Om bakreferensen inte matchar ersätts <pre>"\n"</pre> av tom sträng. Specialbetydelsen kan undertryckas med <backslash>. För varje annan <backslash> förlorar följande tecken sin specialbetydelse (om någon).
        Kopiera innehållet i rfile till standardutmatning som beskrivits ovan.
        Om rfile inte finns eller inte kan läsas ska det behandlas som en tom
        fil utan fel.


[2addr]s/BRE/replacement/flags
: En rad kan delas genom att substituera in ett <newline>. Applikationen ska escapa <newline> i replacement genom att föregå det med <backslash>.
        Ersätt replacement-strängen för instanser av BRE i mönsterutrymmet.
        Valfritt tecken (utom <backslash> eller <newline>) kan användas i
        stället för <slash> som avgränsare. Inuti BRE och replacement kan
        avgränsaren användas bokstavligt om den föregås av <backslash>.


        Replacement skannas från början till slut. Ett '&' i replacement
: Betydelsen av ett oescapat <backslash> följt av ett tecken annat än '''&''', <backslash>, en siffra, <newline> eller avgränsartecknet för kommandot är ospecificerad.
        ersätts av strängen som matchar BRE. Den specialbetydelsen kan
        undertryckas med föregående <backslash>. Tecknen "\n", där n är en
        siffra, ersätts av texten matchad av motsvarande bakreferens. Om
        bakreferensen inte matchar ersätts "\n" med tom sträng. Den
        specialbetydelsen kan undertryckas med föregående <backslash>. För
        varje annat <backslash> förlorar följande tecken sin specialbetydelse
        (om någon).


        En rad kan delas genom att substituera in ett <newline>. Applikationen
: En substitution anses utförd även om replacement är identisk med det som ersätts. <backslash> som används för att ändra standardbetydelsen hos ett efterföljande tecken ska kasseras från BRE eller replacement innan BRE utvärderas eller replacement används.
        ska escapa <newline> i replacement genom att föregå det med ett
        <backslash>.


        Betydelsen av ett oescapat <backslash> direkt följt av ett tecken som
: ''flags'' är noll eller fler av:
        inte är '&', <backslash>, en siffra, <newline>, eller avgränsaren för
        kommandot, är ospecificerad.


        En substitution anses utförd även om replacement är identisk med det
:: ''n'' — substituera endast den ''n'':te förekomsten av BRE i mönsterutrymmet.
        som ersätts. Varje <backslash> som ändrar defaultbetydelsen av ett
:: '''g''' — globalt: substituera alla icke-överlappande förekomster istället för bara första. Om både '''g''' och ''n'' anges är resultatet ospecificerat.
        efterföljande tecken ska kastas från BRE eller replacement innan BRE
:: '''p''' — skriv mönsterutrymmet till standardutmatning om en ersättning gjordes.
        evalueras eller replacement används.
:: '''w''' ''wfile'' — skriv: lägg till mönsterutrymmet till ''wfile'' om en ersättning gjordes. En konform applikation ska föregå ''wfile'' med ett eller fler <blank>-tecken. Om '''w'''-flaggan inte är sista flaggvärdet i en sammanfogning av flera flaggor är resultatet odefinierat.


        flags består av noll eller fler av:
'''''[2addr]t [label]'''''
: Test: förgrena till kommandot ''':''' med ''label'' om någon substitution gjorts sedan senaste inläsning av en indatarad eller exekvering av ett '''t'''. Om ''label'' inte anges, förgrena till slutet av skriptet.


        n
'''''[2addr]w wfile'''''
                Substituera endast för den n:te förekomsten av BRE i
: Lägg till (skriv) mönsterutrymmet till ''wfile''.
                mönsterutrymmet.


        g
'''''[2addr]x'''''
                Global substitution för alla icke-överlappande instanser av
: Byt innehållet i mönster- och hållutrymmen.
                BRE i stället för bara den första. Om både g och n anges är
                resultatet ospecificerat.


        p
'''''[2addr]y/string1/string2/'''''
                Skriv mönsterutrymmet till standardutmatning om en ersättning
: Ersätt alla förekomster av tecken i ''string1'' med motsvarande tecken i ''string2''. Om en <backslash> följd av '''n''' förekommer i ''string1'' eller ''string2'' hanteras de två tecknen som ett enda <newline>. Om antalet tecken i ''string1'' och ''string2'' inte är lika, eller om något tecken i ''string1'' förekommer mer än en gång, är resultatet odefinierat. Valfritt tecken (utom <backslash> eller <newline>) kan användas istället för <slash> som avgränsare. Om avgränsaren inte är '''n''', kan avgränsaren användas bokstavligt i ''string1'' och ''string2'' om den föregås av <backslash>. Om ett <backslash> omedelbart följs av ett <backslash> i ''string1'' eller ''string2'', räknas de två som ett bokstavligt <backslash>. Betydelsen av <backslash> följt av tecken som inte är '''n''', <backslash> eller avgränsaren är odefinierad.
                gjordes.


        w wfile
'''''[0addr]:label'''''
                Skriv (append) mönsterutrymmet till wfile om en ersättning
: Gör ingenting. Detta kommando bär ''label'' som '''b''' och '''t''' kan förgrena till.
                gjordes. Applikationen ska föregå wfile med ett eller fler
                <blank>-tecken. Om w-flaggan inte är den sista i en
                sammanfogning av flera flaggor är resultatet odefinierat.


[2addr]t [label]
'''''[1addr]= '''''
        Test. Hoppa till : kommandotecknet med label om några substitutioner
: Skriv följande till standardutmatning:
        har gjorts sedan senaste läsning av indatarad eller körning av t. Om
        label inte anges, hoppa till slutet av skriptet.


[2addr]w wfile
<pre>
        Lägg till (write) mönsterutrymmet till wfile.
"%d\n", <current line number>
 
</pre>
[2addr]x
        Byt innehållet mellan mönster- och hållutrymme.
 
[2addr]y/string1/string2/
        Ersätt alla förekomster av tecken i string1 med motsvarande tecken i
        string2. Om en <backslash> följd av 'n' förekommer i string1 eller
        string2 ska de två tecknen behandlas som ett enda <newline>. Om antalet
        tecken i string1 och string2 inte är lika, eller om något tecken i
        string1 förekommer mer än en gång, är resultatet odefinierat. Valfritt
        tecken (utom <backslash> eller <newline>) kan användas som avgränsare.
        Om avgränsaren inte är 'n' kan den användas bokstavligt i string1 och
        string2 om den föregås av <backslash>. Om en <backslash> direkt följs
        av en <backslash> i string1 eller string2 ska de räknas som ett enda
        literal <backslash>. Betydelsen av <backslash> följt av tecken som
        inte är 'n', <backslash> eller avgränsaren är odefinierad.
 
[0addr]:label
        Gör ingenting. Detta kommando bär en label som b och t kan hoppa till.


[1addr]=
'''''[0addr]'''''
        Skriv följande till standardutmatning:
: Ignorera detta tomma kommando.


            "%d\n", <aktuellt radnummer>
'''''[0addr]#'''''
: Ignorera '''#''' och resten av raden (behandla som kommentar), med enda undantaget att om de två första tecknen i skriptet är <pre>"#n"</pre> så ska standardutmatningen undertryckas; detta är ekvivalent med '''-n''' på kommandoraden.


[0addr]
== AVSLUTSTATUS ==
        Ignorera detta tomma kommando.


[0addr]#
Följande returvärden ska returneras:
        Ignorera '#' och resten av raden (behandla som kommentar), med det
        enda undantaget att om de två första tecknen i skriptet är "#n" ska
        standardutmatningen undertryckas; detta är ekvivalent med -n på
        kommandoraden.
</pre>
 
== SLUTSTATUS ==
 
<pre>
Följande slutvärden ska returneras:


0
0
        Lyckad körning.
: Lyckad körning.


>0
>0
        Ett fel inträffade.
: Ett fel inträffade.
</pre>


== KONSEKVENSER AV FEL ==
== KONSEKVENSER AV FEL ==


<pre>
Standard.
Standard.


Följande avsnitt är informativa.
''Följande avsnitt är informativa.''
</pre>


== ANVÄNDNING ==
== PROGRAMANVÄNDNING ==


<pre>
Reguljära uttryck matchar hela strängar, inte bara enskilda rader, men ett <newline> matchas av <pre>'\n'</pre> i ett ''sed''-RE; ett <newline> är inte tillåtet av den generella definitionen av reguljärt uttryck i POSIX.1-2008. Observera också att <pre>'\n'</pre> inte kan användas för att matcha ett <newline> i slutet av en godtycklig indatarad; <newline>-tecken förekommer i mönsterutrymmet som resultat av redigeringskommandot '''N'''.
Reguljära uttryck matchar hela strängar, inte bara enskilda rader, men ett
<newline> matchas av '\n' i ett sed-RE; ett <newline> är inte tillåtet i den
allmänna definitionen av reguljära uttryck i POSIX.1-2008. Notera också att
'\n' inte kan användas för att matcha ett <newline> i slutet av en godtycklig
indatarad; <newline>-tecken förekommer i mönsterutrymmet som ett resultat av
redigeringskommandot N.


När sed används för att bearbeta sökvägar rekommenderas att LC_ALL, eller åt
När ''sed'' används för att bearbeta sökvägar rekommenderas att LC_ALL, eller åtminstone LC_CTYPE och LC_COLLATE, sätts till 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 blir verktygets beteende odefinierat. I POSIX-lokalen är varje byte ett giltigt enkelbyte-tecken, och problemet undviks därför.
minstone LC_CTYPE och LC_COLLATE, sätts till POSIX eller C i miljön, eftersom
sökvägar kan innehålla bytsekvenser som inte bildar giltiga tecken i vissa
locales; i så fall blir verktygets beteende odefinierat. I POSIX-locale är
varje byte ett giltigt enkelbyte-tecken och problemet undviks därmed.
</pre>


== EXEMPEL ==
== EXEMPEL ==
Detta ''sed''-skript simulerar BSD-kommandot ''cat'' '''-s''' och pressar ihop överflödiga tomrader från standardinmatningen:


<pre>
<pre>
Detta sed-skript simulerar BSD cat -s-kommandot genom att ”klämma ihop”
sed -n '
överskjutande tomrader från standard in.
# Write non-empty lines.
/./ {
    p
    d
    }
# Write a single empty line, then look for more empty lines.
/^$/    p
# Get next line, discard the held <newline> (empty line),
# and look for more empty lines.
:Empty
/^$/    {
    N
    s/.//
    b Empty
    }
# Write the non-empty line before going back to search
# for the first in a set of empty lines.
    p
'
</pre>


    sed -n '
Följande ''sed''-kommando är en mycket enklare metod för att pressa ihop tomrader, även om det inte är exakt samma som ''cat'' '''-s''' eftersom det tar bort inledande tomrader:
    # Skriv icke-tomma rader.
    /./ {
        p
        d
        }
    # Skriv en enda tom rad, leta sedan efter fler tomrader.
    /^$/    p
    # Hämta nästa rad, kasta det hållna <newline> (tom rad),
    # och leta efter fler tomrader.
    :Empty
    /^$/    {
        N
        s/.//
        b Empty
        }
    # Skriv den icke-tomma raden innan vi går tillbaka och söker
    # efter den första i en uppsättning tomrader.
        p
    '


Följande sed-kommando är en mycket enklare metod för att klämma ihop tomrader,
<pre>
även om det inte är exakt samma som cat -s eftersom det tar bort eventuella
sed -n '/./,/^$/p'
inledande tomrader:
 
    sed -n '/./,/^$/p'
</pre>
</pre>


== MOTIVERING ==
== MOTIVERING ==


<pre>
Denna del av POSIX.1-2017 kräver att implementationer stödjer minst tio distinkta ''wfile'':er, vilket matchar historisk praxis på många implementationer. Implementationer uppmuntras att stödja fler, men konforma applikationer bör inte överskrida denna gräns.
Denna volym av POSIX.1-2017 kräver att implementationer stödjer minst tio
distinkta wfile:er, i linje med historisk praxis på många implementationer.
Implementationer uppmuntras att stödja fler, men konforma applikationer bör
inte överskrida denna gräns.
 
Slutstatuskoderna här skiljer sig från System V. System V returnerar 2 för
”garbled” sed-kommandon, men returnerar noll med sin användningshjälp eller om
indatafilen inte kunde öppnas. Standardutvecklarna ansåg detta vara en bugg.


Sättet som l-kommandot skriver icke-utskrivbara tecken ändrades för att undvika
Exitstatuskoderna här skiljer sig från System V. System V returnerar 2 för trasiga ''sed''-kommandon, men returnerar noll tillsammans med sitt användningsmeddelande eller om indatafilen inte kunde öppnas. Standardutvecklarna ansåg detta vara en bugg.
den historiska backspace-overstrike-metoden, och andra krav för entydig
utmatning lades till. Se RATIONALE för ed(1p) för detaljer om valt format, som
är samma som valt för sed.


Denna volym av POSIX.1-2017 kräver mönster- och hållutrymmen om minst 8192 byte,
Sättet som '''l'''-kommandot skriver icke-utskrivbara tecken ändrades för att undvika den historiska metoden med backspace-overstrike, och andra krav för att uppnå entydig utmatning lades till. Se MOTIVERING för [[ed(1p)]] för detaljer om formatvalet, vilket är samma som för ''sed''.
större än 4000 byte som vissa historiska implementationer använde, men mindre
än 20480 byte i ett tidigt förslag. Implementationer uppmuntras att dynamiskt
allokera större utrymmen vid behov.


Kraven på acceptans av <blank> och <space> i kommandorader har gjorts mer
Denna del av POSIX.1-2017 kräver mönster- och hållutrymmen på minst 8192 byte, större än 4000 byte som vissa historiska implementationer använde, men mindre än 20480 byte som användes i ett tidigt förslag. Implementationer uppmuntras att dynamiskt kunna allokera större utrymmen vid behov.
explicit än i tidiga förslag för att tydligt beskriva historisk praxis och
undanröja förvirring kring frasen ”protect initial blanks [sic] and tabs from
the stripping that is done on every script line” som förekommer i mycket
historisk dokumentation om sed:s textbeskrivning. (Inte alla implementationer
är kända för att ha strippat <blank> från textrader, även om de alla tillåtit
inledande <blank> före adressen på en kommandorad.)


Behandlingen av '#'-kommentarer skiljer sig från SVID som endast tillåter en
Kraven för acceptans av <blank> och <space> i kommandorader har gjorts mer explicita än i tidiga förslag för att tydligt beskriva historisk praxis och minska förvirring kring formuleringen ”protect initial blanks [sic] and tabs from the stripping that is done on every script line” som förekommer i mycket historisk dokumentation om ''sed'' och textbeskrivningen. (Inte alla implementationer är kända för att ha strippat <blank> från textrader, men de har tillåtit inledande <blank> före adressen.)
kommentar som första raden i skriptet, men matchar BSD-deriverade
implementationer. Kommentar-tecknet behandlas som ett kommando och har samma
egenskaper vad gäller acceptans med inledande <blank>; BSD har historiskt
stött detta.


Tidiga förslag krävde att en script_file hade minst en icke-kommentarrad. Vissa
Hanteringen av '''#'''-kommentarer skiljer sig från SVID som endast tillåter kommentar som första raden i skriptet, men matchar BSD-deriverade implementationer. Kommentartecknet behandlas som ett kommando och har samma egenskaper vad gäller att accepteras med inledande <blank>; BSD-implementationen har historiskt stött detta.
historiska implementationer har betett sig oväntat om så inte var fallet.
Standardutvecklarna ansåg detta vara felaktigt och att applikationsutvecklare
inte ska behöva undvika funktionen. En korrekt implementation av denna volym av
POSIX.1-2017 ska tillåta script_file:er som endast består av kommentarrader.


Tidiga förslag angav att om -e och -f blandades skulle alla -e behandlas före
Tidiga förslag krävde att en ''script_file'' skulle ha minst en icke-kommentarrad. Vissa historiska implementationer har betett sig oväntat om så inte var fallet. Standardutvecklarna ansåg detta vara felaktigt och att applikationsutvecklare inte ska behöva undvika funktionen. En korrekt implementation av POSIX.1-2017 ska tillåta ''script_file'' som endast består av kommentarrader.
alla -f. Detta har ändrats till att processa dem i den ordning de presenteras,
eftersom det matchar historisk praxis och är mer intuitivt.


Behandlingen av p-flaggan till s-kommandot skiljer sig mellan System V och
Tidiga förslag angav att om '''-e''' och '''-f''' blandades så behandlades alla '''-e''' före '''-f'''. Detta har ändrats till att processa i angiven ordning eftersom det matchar historisk praxis och är mer intuitivt.
BSD-baserade system när standardutmatningen undertrycks. I följande två
exempel:


    echo a | sed    's/a/A/p'
Hanteringen av '''p'''-flaggan till '''s''' skiljer sig mellan System V och BSD-baserade system när standardutmatning är undertryckt. I exemplen:
    echo a | sed -n 's/a/A/p'


anger POSIX.1-2017, BSD, System V-dokumentation och SVID att första exemplet
<pre>
ska skriva två rader med A, medan det andra ska skriva en. Vissa System V-
echo a | sed    's/a/A/p'
system skriver A endast en gång i båda exemplen eftersom p-flaggan ignoreras om
echo a | sed -n 's/a/A/p'
-n inte anges.
</pre>


Detta är en diametral skillnad mellan system som inte kunde förenas genom
anger POSIX.1-2017, BSD, System V-dokumentation och SVID att första exemplet ska skriva två rader med '''A''', medan det andra ska skriva en. Vissa System V-system skriver bara '''A''' en gång i båda exemplen eftersom '''p'''-flaggan ignoreras om '''-n''' inte anges.
kompromissen att deklarera beteendet ospecificerat. SVID/BSD/System V-
beteendet antogs för POSIX.1-2017 eftersom:


*  Ingen känd dokumentation för historiska system beskriver interaktionen
Detta var en diametral skillnad mellan system som inte kunde lösas genom att deklarera beteendet som ospecificerat. SVID/BSD/System V-beteendet antogs för POSIX.1-2017 eftersom:
    mellan p-flaggan och -n.


* Det valda beteendet är mer korrekt eftersom det inte finns någon teknisk
* Ingen känd historisk dokumentation beskriver interaktionen mellan '''p'''-flaggan och '''-n'''.
    motivering för interaktion mellan p och -n. En relation skulle kunna
* Det valda beteendet är mer korrekt eftersom det inte finns någon teknisk motivering för en sådan interaktion. En relation mellan '''-n''' och '''p''' skulle kunna antyda att de bara används tillsammans, men det ignorerar giltiga skript som bryter cykeln med '''D''', '''d''', '''q''' eller branch-kommandon. Sådana skript förlitar sig på '''p'''-suffix för att skriva mönsterutrymmet eftersom de inte använder standardutmatningen längst ned i skriptet.
    antyda att de bara används tillsammans, men detta ignorerar giltiga skript
* Eftersom '''-n''' gör '''p''' överflödig, skulle en interaktion bara vara användbar om ''sed''-skript var skrivna för att köras både med och utan '''-n'''. Det bedöms som osannolikt. Det är ännu mer osannolikt att programmerare har kodat '''p''' i tron att den är onödig. Eftersom interaktionen inte var dokumenterad minskar sannolikheten ytterligare att någon upptäckt och förlitat sig på den.
    som bryter den cykliska behandlingen via D, d, q eller branch-kommandon.
* Skript som går sönder under det specificerade beteendet producerar för mycket output istället för för lite, vilket är lättare att diagnostisera och rätta.
    Sådana skript förlitar sig på p-suffixet för att skriva mönsterutrymmet
    eftersom de inte använder standardutmatningen vid ”botten” av skriptet.


*  Eftersom -n gör p-flaggan onödig skulle en interaktion endast vara nyttig
Formen av substitutionskommandot som använder ''n''-suffix begränsades till de första 512 matchningarna i ett tidigt förslag. Den begränsningen har tagits bort eftersom det inte finns skäl att en redigerare som bearbetar rader av {LINE_MAX}-längd skulle ha en sådan restriktion. Kommandot <pre>s/a/A/2047</pre> ska kunna substituera den 2047:e förekomsten av '''a''' på en rad.
    om sed-skript var skrivna för att köras både med och utan -n. Detta anses
    osannolikt. Än mer osannolikt är att programmerare har kod som förväntar
    sig att p-flaggan skulle vara onödig. Då interaktionen inte var
    dokumenterad minskar sannolikheten att någon upptäckt den och beroende av
    den ytterligare.


*  Slutligen ger skript som fallerar under det specificerade beteendet för
Kommandona '''b''', '''t''' och ''' : ''' dokumenteras som att ignorera inledande blanktecken, men inget sägs om efterföljande blanktecken. Historiska implementationer har tilldelat olika platser åt etiketterna '''x''' och <pre>"x "</pre>. Detta är inte nyttigt och leder till subtila programmeringsfel, men det är historisk praxis och en ändring skulle teoretiskt kunna bryta fungerande skript. Implementatörer uppmuntras att ge varningar om etiketter som aldrig refereras av '''b''' eller '''t''', hopp till etiketter som inte finns, och label-argument som riskerar trunkering.
    mycket utdata i stället för för lite, vilket är lättare att felsöka och
    rätta.


Formen av substitueringskommandot som använder n-suffixet begränsades till de
Tidigare versioner av denna standard tillät implementationer med bytes som inte var åtta bitar, men detta har ändrats i denna version.
första 512 matchningarna i ett tidigt förslag. Denna gräns har tagits bort
eftersom det inte finns skäl att en editor som bearbetar rader av {LINE_MAX}
ska ha begränsningen. Kommandot s/a/A/2047 ska kunna ersätta den 2047:e
förekomsten av a på en rad.


b-, t- och :-kommandona dokumenteras som att de ignorerar inledande blanksteg,
== FRAMTIDA RIKTNINGAR ==
men inget sägs om avslutande blanksteg. Historiska sed-implementationer har
tilldelat olika platser till etiketterna 'x' och "x ". Detta är inte nyttigt
och leder till subtila programmeringsfel, men är historisk praxis, och
ändringar kan teoretiskt bryta fungerande skript. Implementatörer uppmuntras
att ge varningar om etiketter som aldrig refereras av b eller t, hopp till
etiketter som inte finns, och etikettargument som kan trunkeras.


Tidigare versioner av standarden tillät implementationer med byte som inte var
Inga.
åtta bitar, men detta har ändrats i denna version.
</pre>
 
== FRAMTIDA INRIKTNING ==
 
<pre>
Ingen.
</pre>


== SE ÄVEN ==
== SE ÄVEN ==


<pre>
[[awk(1p)]], [[ed(1p)]], [[grep(1p)]]
[[awk(1p)]], [[ed(1p)]], [[grep(1p)]]


Base Definitions-volymen i POSIX.1-2017, Tabell 5-1, Escape Sequences and
Base Definitions-delen av POSIX.1-2017: Tabell 5-1 ''Escape Sequences and Associated Actions'', Kapitel 8 ''Environment Variables'', Avsnitt 9.3 ''Basic Regular Expressions'', Avsnitt 12.2 ''Utility Syntax Guidelines''
Associated Actions, Kapitel 8, Environment Variables, Avsnitt 9.3, Basic
Regular Expressions, Avsnitt 12.2, Utility Syntax Guidelines
</pre>


== UPPHOVSRÄTT ==
== UPPHOVSRÄTT ==


<pre>
Delar av denna text är återtryckta och reproducerade i elektronisk form från IEEE Std 1003.1-2017, ''Standard for Information Technology Portable Operating System Interface (POSIX)'', The Open Group Base Specifications Issue 7, 2018 Edition, copyright (C) 2018 av Institute of Electrical and Electronics Engineers, Inc och The Open Group. Vid avvikelse mellan denna version och originalstandarden är originalet från IEEE och The Open Group referensdokument. Originalstandarden kan erhållas online från The Open Group.
Delar av denna text är omtryckta och återgivna i elektronisk form från
 
IEEE Std 1003.1-2017, Standard for Information Technology -- Portable Operating
Eventuella typografiska eller formateringsfel som förekommer denna sida har sannolikt introducerats vid konverteringen av källfilerna till man-sidesformat. För att rapportera sådana fel, se dokumentationen om rapportering av buggar för man-pages-projektet.
System Interface (POSIX), The Open Group Base Specifications Issue 7, 2018
 
Edition, Copyright (C) 2018 av Institute of Electrical and Electronics
= Sidslut =
Engineers, Inc och The Open Group. Vid eventuell avvikelse mellan denna
version och den ursprungliga IEEE- och The Open Group-standarden är den
ursprungliga standarden skiljedomande dokument. Originalstandarden kan erhållas
online http://www.opengroup.org/unix/online.html .


Eventuella typografiska eller formateringsfel som förekommer i denna sida har
Orginalhemsidan på Engelska :https://man7.org/linux/man-pages/man1/sed.1p.html
troligen introducerats vid konverteringen av källfilerna till man-sidesformat.
<HR>
För att rapportera sådana fel, se https://www.kernel.org/doc/man-pages/reporting_bugs.html
Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på
</pre>
https://www.linux.se/kontaka-linux-se/
<BR><BR>Tack till [https://datorhjalp.se Datorhjälp Stockholm] som har  sponsrat [https://www.linux.se Linux.se] med webbhotell.


== REFERENSER TILL DENNA SIDA ==
[[Kategori:Linuxmanual grupp 1]]
[[awk(1p)]], [[csplit(1p)]], [[dd(1p)]], [[ed(1p)]], [[ex(1p)]], [[grep(1p)]], [[head(1p)]], [[od(1p)]], [[tr(1p)]]
[[Kategori:Linuxmanual]]

Nuvarande version från 10 januari 2026 kl. 07.44

sed(1p)

PROLOG

Denna manualsida är en del av POSIX Programmer's Manual. Linux-implementationen av detta gränssnitt kan skilja sig (konsultera motsvarande Linux-manualsida för detaljer om Linux-beteende), eller så kanske gränssnittet inte är implementerat på Linux.

NAMN

sed — strömredigerare

SYNOPSIS

sed [-n] script [file...]

sed [-n] -e script [-e script]... [-f script_file]... [file...]

sed [-n] [-e script]... -f script_file [-f script_file]... [file...]

BESKRIVNING

Verktyget sed är en strömredigerare som läser en eller flera textfiler, gör redigeringsändringar enligt ett skript med redigeringskommandon och skriver resultatet till standardutmatning. Skriptet hämtas antingen från operandsträngen script eller från en kombination av optionsargumenten från alternativen -e script och -f script_file.

FLAGGOR

Verktyget sed ska följa Base Definitions-delen av POSIX.1-2017, avsnitt 12.2, Utility Syntax Guidelines, med undantag för att presentationsordningen för alternativen -e och -f är betydelsefull.

Följande alternativ ska stödjas:

-e script

Lägg till redigeringskommandona som anges av optionsargumentet script sist i skriptet av redigeringskommandon.

-f script_file

Lägg till redigeringskommandona i filen script_file sist i skriptet av redigeringskommandon.

-n

Undertryck standardutmatningen (där varje rad, efter att den undersökts för redigering, skrivs till standardutmatning). Endast rader som uttryckligen valts för utmatning skrivs.

Om någon -e- eller -f-flagga anges ska skriptet av redigeringskommandon initialt vara tomt. Kommandona som anges av varje -e eller -f läggs till i den ordning de anges. När varje tillägg görs ska, om föregående tillägg (om något) kom från en -e-flagga, ett <newline> infogas före det nya tillägget. Det resulterande skriptet ska ha samma egenskaper som operanden script, beskrivet i avsnittet OPERANDER.

OPERANDER

Följande operander ska stödjas:

file

En sökväg till en fil vars innehåll läses och redigeras. Om flera file-operander anges ska de namngivna filerna läsas i den ordning de anges och sammanfogningen redigeras. Om inga file-operander anges ska standardinmatningen användas.

script

En sträng som ska användas som skript av redigeringskommandon. Applikationen ska inte presentera ett script som bryter mot begränsningarna för en textfil, förutom att sista tecknet inte behöver vara ett <newline>.

STDIN

Standardinmatningen ska användas om inga file-operander anges, och ska användas om en file-operand är '- och implementationen behandlar '- som standardinmatning. Annars ska standardinmatningen inte användas. Se avsnittet INDATAFILER.

INDATAFILER

Indatafilerna ska vara textfiler. script_file som namnges av -f ska bestå av redigeringskommandon.

MILJÖVARIABLER

Följande miljövariabler påverkar exekveringen av sed:

LANG

Ger ett standardvärde för internationaliseringsvariabler som är osatta eller tomma. (Se Base Definitions-delen av POSIX.1-2017, avsnitt 8.2, Internationalization Variables för prioriteringsordningen.)

LC_ALL

Om satt till en icke-tom sträng åsidosätter den värdena för alla andra internationaliseringsvariabler.

LC_COLLATE

Bestämmer lokal för beteendet hos intervall, ekvivalensklasser och flerteckens-kollationselement i reguljära uttryck.

LC_CTYPE

Bestämmer lokal för tolkning av bytesekvenser i textdata som tecken (t.ex. enkelbyte vs. multibyte i argument och indatafiler), samt beteende för teckenklasser i reguljära uttryck.

LC_MESSAGES

Bestämmer lokal som ska användas för format och innehåll i diagnostiska meddelanden skrivna till standardfel.

NLSPATH

Bestämmer plats för meddelandekataloger vid bearbetning av LC_MESSAGES.

ASYNKRONA HÄNDELSER

Standard.

STDOUT

Indatafilerna ska skrivas till standardutmatning, med redigeringskommandona i skriptet tillämpade. Om -n anges ska endast de indatarader som väljs av skriptet skrivas till standardutmatning.

STDERR

Standardfel ska endast användas för diagnostik- och varningsmeddelanden.

UTFILER

Utdatafilerna ska vara textfiler vars format beror på de angivna redigeringskommandona.

UTVIDGAD BESKRIVNING

Skriptet script ska bestå av redigeringskommandon på följande form:

[address[,address]]function

där function representerar ett kommandoverb med ett tecken från listan i Editing Commands in sed, följt av eventuella argument.

Kommandot kan föregås av <blank>-tecken och/eller <semicolon>-tecken. Funktionen kan föregås av <blank>-tecken. Dessa valfria tecken ska inte ha någon effekt.

Vid standardkörning ska sed cykliskt lägga till en indatarad, utan dess avslutande <newline>-tecken, i mönsterutrymmet (pattern space). Inläsning från indata ska hoppas över om ett <newline> fanns i mönsterutrymmet före ett D-kommando som avslutade föregående cykel. sed ska därefter tillämpa, i ordning, alla kommandon vars adresser väljer det mönsterutrymmet, tills ett kommando startar nästa cykel eller avslutar. Om inga kommandon uttryckligen startade en ny cykel ska, vid slutet av skriptet, mönsterutrymmet kopieras till standardutmatning (utom när -n anges) och mönsterutrymmet ska raderas. När mönsterutrymmet skrivs till standardutmatning eller en namngiven fil ska sed omedelbart följa det med ett <newline>.

Vissa redigeringskommandon använder ett hållutrymme (hold space) för att spara hela eller delar av mönsterutrymmet för senare hämtning. Mönster- och hållutrymmen ska vart och ett kunna hålla minst 8192 byte.

Adresser i sed

En adress är antingen ett decimaltal som räknar indatarader kumulativt över filer, tecknet '$ som adresserar sista indataraden, eller en kontextadress (som består av ett BRE, beskrivet i Regular Expressions in sed, föregånget och följt av en avgränsare, vanligen ett <slash>).

Ett redigeringskommando utan adresser ska välja varje mönsterutrymme.

Ett redigeringskommando med en adress ska välja varje mönsterutrymme som matchar adressen.

Ett redigeringskommando med två adresser ska välja det inklusiva intervallet från första mönsterutrymmet som matchar första adressen, till och med nästa mönsterutrymme som matchar den andra. (Om den andra adressen är ett tal mindre än eller lika med radnumret för första valda raden ska endast en rad väljas.) Från första raden efter det valda intervallet ska sed åter leta efter första adressen och upprepa processen. Att utelämna endera eller båda adressdelarna i följande form ger odefinierat resultat:

[address[,address]]

Reguljära uttryck i sed

sed ska stödja de BRE som beskrivs i Base Definitions-delen av POSIX.1-2017, avsnitt 9.3, Basic Regular Expressions, med följande tillägg:

  • I en kontextadress ska konstruktionen
    "\cBREc"
    där c är valfritt tecken utom <backslash> eller <newline>, vara identisk med
    "/BRE/"
    . Om tecknet som betecknas av c förekommer efter en <backslash> ska det betraktas som ett bokstavligt tecken som inte terminerar BRE. Exempel: i kontextadressen
    "\xabc\xdefx"
    står det andra x för sig självt, så BRE blir
    "abcxdef"
    .
  • Escape-sekvensen
    '\n'
    ska matcha ett inbäddat <newline> i mönsterutrymmet. En bokstavlig <newline> ska inte användas i BRE för en kontextadress eller i substitueringsfunktionen.
  • Om ett RE är tomt (dvs. inget mönster anges) ska sed bete sig som om senaste RE som användes i senaste tillämpade kommandot (antingen som adress eller del av ett substitueringskommando) angavs.

Redigeringskommandon i sed

I följande lista över redigeringskommandon anges det maximala antalet tillåtna adresser för varje funktion med [0addr], [1addr] eller [2addr].

Argumentet text ska bestå av en eller flera rader. Varje inbäddat <newline> i texten ska föregås av en <backslash>. Andra <backslash>-tecken i texten ska tas bort och följande tecken behandlas bokstavligt.

Kommandoverben r och w, samt w-flaggan till s-kommandot, tar en parameter rfile (eller wfile), separerad från kommandobokstaven/flaggan med ett eller flera <blank>-tecken; implementationer kan tillåta noll separation som en utökning.

Argumentet rfile eller wfile ska avsluta redigeringskommandot. Varje wfile ska skapas innan bearbetning börjar. Implementationer ska stödja minst tio wfile-argument i skriptet; det faktiska antalet (≥10) är ospecificerat. Användning av wfile ska skapa filen initialt om den inte finns, eller ersätta innehållet i en befintlig fil.

Kommandoverben b, r, s, t, w, y och  : ska acceptera ytterligare argument. Följande synopsis anger vilka argument som ska separeras från kommandobokstaven med ett enda <space>.

Kommandona a och r schemalägger text för senare utmatning. Texten för a och innehållet i filen för r ska skrivas till standardutmatning precis före nästa försök att hämta en indatarad vid exekvering av N eller n, eller när skriptet tar slut. Om detta sker vid slutet av skriptet och -n inte angetts, ska texten skrivas efter att mönsterutrymmet kopierats till standardutmatning. Innehållet i filen för r ska vara som vid tiden då utmatningen skrivs, inte när r-kommandot tillämpas. Texten ska matas ut i den ordning som a och r tillämpades på indata.

Redigeringskommandon andra än {...}, a, b, c, i, r, t, w, :, och # kan följas av ett <semicolon>, valfria <blank>-tecken och ett annat redigeringskommando. Men om ett s-kommando används med w-flaggan ger det odefinierat resultat att följa det av ett annat kommando på detta sätt.

En funktion kan föregås av tecknet !, i vilket fall funktionen ska tillämpas om adresserna inte väljer mönsterutrymmet. Noll eller fler <blank>-tecken ska accepteras före !. Det är ospecificerat om <blank>-tecken kan följa !, och konforma applikationer ska inte följa ! med <blank>-tecken.

Om ett label-argument (till b, t eller  : ) innehåller tecken utanför den portabla filnamnsteckenuppsättningen, eller om label är längre än 8 byte, är beteendet ospecificerat. Implementationer ska stödja label-argument som är unika åtminstone upp till 8 byte; den faktiska längden (≥8) som stöds är ospecificerad. Det är ospecificerat om överskridande av maximal label-längd orsakar fel eller tyst trunkering.

Nedan följer kommandon (som i originaltexten), med adressklass i hakparentes:

[2addr] {
editing command
...
}

[2addr] {

Exekvera en lista av sed-kommandon endast när mönsterutrymmet väljs. Listan ska omges av klamrar. Klamrarna kan föregås eller följas av <blank>-tecken. <right-brace> ska föregås av <newline> eller <semicolon> (före eventuella <blank>-tecken före <right-brace>). Varje kommando i listan ska avslutas av <newline> eller av <semicolon> om det är tillåtet utanför klamrarna. Kommandon kan föregås av <blank>-tecken men ska inte följas av <blank>-tecken.
[1addr]a\
text

[1addr]a

Skriv text till standardutmatning som beskrivet ovan.
[2addr]b [label]

[2addr]b [label]

Förgrena till kommandot : som bär argumentet label. Om label inte anges, förgrena till slutet av skriptet.
[2addr]c\
text

[2addr]c

Radera mönsterutrymmet. Med 0 eller 1 adress eller vid slutet av ett 2-adressintervall, lägg text på utmatningen och starta nästa cykel.

[2addr]d

Radera mönsterutrymmet och starta nästa cykel.

[2addr]D

Om mönsterutrymmet inte innehåller <newline>, radera mönsterutrymmet och starta en normal ny cykel som om d-kommandot givits. Annars: radera det initiala segmentet av mönsterutrymmet genom första <newline> och starta nästa cykel med återstående mönsterutrymme utan att läsa ny indata.

[2addr]g

Ersätt innehållet i mönsterutrymmet med innehållet i hållutrymmet.

[2addr]G

Lägg till i mönsterutrymmet ett <newline> följt av innehållet i hållutrymmet.

[2addr]h

Ersätt innehållet i hållutrymmet med innehållet i mönsterutrymmet.

[2addr]H

Lägg till i hållutrymmet ett <newline> följt av innehållet i mönsterutrymmet.
[1addr]i\
text

[1addr]i

Skriv text till standardutmatning.

[2addr]l (bokstaven ell)

Skriv mönsterutrymmet till standardutmatning i en visuellt entydig form. Tecknen i POSIX.1-2017 Base Definitions, Tabell 5-1, Escape Sequences and Associated Actions (\, \a, \b, \f, \r, \t, \v) ska skrivas som motsvarande escape-sekvens; \n i tabellen är inte tillämpligt. Icke-utskrivbara tecken som inte finns i tabellen ska skrivas som ett tresiffrigt oktaltal (med föregående <backslash>) för varje byte i tecknet (mest signifikanta byte först). Långa rader ska vikas, där vikpunkten markeras genom att skriva en <backslash> följt av <newline>; längden där vikning sker är ospecificerad men bör vara lämplig för utdataenheten. Slutet av varje rad markeras med $.

[2addr]n

Skriv mönsterutrymmet till standardutmatning om standardutmatningen inte undertryckts och ersätt mönsterutrymmet med nästa indatarad utan dess avslutande <newline>. Om ingen nästa indatarad finns ska n förgrena till slutet av skriptet och avsluta utan att starta en ny cykel.

[2addr]N

Lägg till nästa indatarad utan dess avslutande <newline> till mönsterutrymmet, med ett inbäddat <newline> som separator. Observera att aktuellt radnummer ändras. Om ingen nästa indatarad finns ska N förgrena till slutet av skriptet och avsluta utan att starta ny cykel eller kopiera mönsterutrymmet till standardutmatning.

[2addr]p

Skriv mönsterutrymmet till standardutmatning.

[2addr]P

Skriv mönsterutrymmet, fram till första <newline>, till standardutmatning.

[1addr]q

Förgrena till slutet av skriptet och avsluta utan att starta en ny cykel.

[1addr]r rfile

Kopiera innehållet i rfile till standardutmatning som beskrivet ovan. Om rfile inte finns eller inte kan läsas ska den behandlas som en tom fil utan fel.

[2addr]s/BRE/replacement/flags

Ersätt replacement för förekomster av BRE i mönsterutrymmet. Valfritt tecken (utom <backslash> eller <newline>) kan användas istället för <slash> som avgränsare. Inom BRE och replacement kan avgränsartecknet användas bokstavligt om det föregås av <backslash>.
Replacement-strängen skannas från början till slut. Ett <ampersand> (&) i replacement ersätts av strängen som matchar BRE. Denna specialbetydelse kan undertryckas med <backslash> före &. Tecknen
"\n"
där n är en siffra ersätts av texten som matchas av motsvarande bakreferens. Om bakreferensen inte matchar ersätts
"\n"
av tom sträng. Specialbetydelsen kan undertryckas med <backslash>. För varje annan <backslash> förlorar följande tecken sin specialbetydelse (om någon).
En rad kan delas genom att substituera in ett <newline>. Applikationen ska escapa <newline> i replacement genom att föregå det med <backslash>.
Betydelsen av ett oescapat <backslash> följt av ett tecken annat än &, <backslash>, en siffra, <newline> eller avgränsartecknet för kommandot är ospecificerad.
En substitution anses utförd även om replacement är identisk med det som ersätts. <backslash> som används för att ändra standardbetydelsen hos ett efterföljande tecken ska kasseras från BRE eller replacement innan BRE utvärderas eller replacement används.
flags är noll eller fler av:
n — substituera endast den n:te förekomsten av BRE i mönsterutrymmet.
g — globalt: substituera alla icke-överlappande förekomster istället för bara första. Om både g och n anges är resultatet ospecificerat.
p — skriv mönsterutrymmet till standardutmatning om en ersättning gjordes.
w wfile — skriv: lägg till mönsterutrymmet till wfile om en ersättning gjordes. En konform applikation ska föregå wfile med ett eller fler <blank>-tecken. Om w-flaggan inte är sista flaggvärdet i en sammanfogning av flera flaggor är resultatet odefinierat.

[2addr]t [label]

Test: förgrena till kommandot : med label om någon substitution gjorts sedan senaste inläsning av en indatarad eller exekvering av ett t. Om label inte anges, förgrena till slutet av skriptet.

[2addr]w wfile

Lägg till (skriv) mönsterutrymmet till wfile.

[2addr]x

Byt innehållet i mönster- och hållutrymmen.

[2addr]y/string1/string2/

Ersätt alla förekomster av tecken i string1 med motsvarande tecken i string2. Om en <backslash> följd av n förekommer i string1 eller string2 hanteras de två tecknen som ett enda <newline>. Om antalet tecken i string1 och string2 inte är lika, eller om något tecken i string1 förekommer mer än en gång, är resultatet odefinierat. Valfritt tecken (utom <backslash> eller <newline>) kan användas istället för <slash> som avgränsare. Om avgränsaren inte är n, kan avgränsaren användas bokstavligt i string1 och string2 om den föregås av <backslash>. Om ett <backslash> omedelbart följs av ett <backslash> i string1 eller string2, räknas de två som ett bokstavligt <backslash>. Betydelsen av <backslash> följt av tecken som inte är n, <backslash> eller avgränsaren är odefinierad.

[0addr]:label

Gör ingenting. Detta kommando bär label som b och t kan förgrena till.

[1addr]=

Skriv följande till standardutmatning:
"%d\n", <current line number>

[0addr]

Ignorera detta tomma kommando.

[0addr]#

Ignorera # och resten av raden (behandla som kommentar), med enda undantaget att om de två första tecknen i skriptet är
"#n"
så ska standardutmatningen undertryckas; detta är ekvivalent med -n på kommandoraden.

AVSLUTSTATUS

Följande returvärden ska returneras:

0

Lyckad körning.

>0

Ett fel inträffade.

KONSEKVENSER AV FEL

Standard.

Följande avsnitt är informativa.

PROGRAMANVÄNDNING

Reguljära uttryck matchar hela strängar, inte bara enskilda rader, men ett <newline> matchas av

'\n'

i ett sed-RE; ett <newline> är inte tillåtet av den generella definitionen av reguljärt uttryck i POSIX.1-2008. Observera också att

'\n'

inte kan användas för att matcha ett <newline> i slutet av en godtycklig indatarad; <newline>-tecken förekommer i mönsterutrymmet som resultat av redigeringskommandot N.

När sed används för att bearbeta sökvägar rekommenderas att LC_ALL, eller åtminstone LC_CTYPE och LC_COLLATE, sätts till 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 blir verktygets beteende odefinierat. I POSIX-lokalen är varje byte ett giltigt enkelbyte-tecken, och problemet undviks därför.

EXEMPEL

Detta sed-skript simulerar BSD-kommandot cat -s och pressar ihop överflödiga tomrader från standardinmatningen:

sed -n '
# Write non-empty lines.
 /./ {
     p
     d
     }
# Write a single empty line, then look for more empty lines.
/^$/    p
# Get next line, discard the held <newline> (empty line),
# and look for more empty lines.
:Empty
/^$/    {
    N
    s/.//
    b Empty
    }
# Write the non-empty line before going back to search
# for the first in a set of empty lines.
    p
'

Följande sed-kommando är en mycket enklare metod för att pressa ihop tomrader, även om det inte är exakt samma som cat -s eftersom det tar bort inledande tomrader:

sed -n '/./,/^$/p'

MOTIVERING

Denna del av POSIX.1-2017 kräver att implementationer stödjer minst tio distinkta wfile:er, vilket matchar historisk praxis på många implementationer. Implementationer uppmuntras att stödja fler, men konforma applikationer bör inte överskrida denna gräns.

Exitstatuskoderna här skiljer sig från System V. System V returnerar 2 för trasiga sed-kommandon, men returnerar noll tillsammans med sitt användningsmeddelande eller om indatafilen inte kunde öppnas. Standardutvecklarna ansåg detta vara en bugg.

Sättet som l-kommandot skriver icke-utskrivbara tecken ändrades för att undvika den historiska metoden med backspace-overstrike, och andra krav för att uppnå entydig utmatning lades till. Se MOTIVERING för ed(1p) för detaljer om formatvalet, vilket är samma som för sed.

Denna del av POSIX.1-2017 kräver mönster- och hållutrymmen på minst 8192 byte, större än 4000 byte som vissa historiska implementationer använde, men mindre än 20480 byte som användes i ett tidigt förslag. Implementationer uppmuntras att dynamiskt kunna allokera större utrymmen vid behov.

Kraven för acceptans av <blank> och <space> i kommandorader har gjorts mer explicita än i tidiga förslag för att tydligt beskriva historisk praxis och minska förvirring kring formuleringen ”protect initial blanks [sic] and tabs from the stripping that is done on every script line” som förekommer i mycket historisk dokumentation om sed och textbeskrivningen. (Inte alla implementationer är kända för att ha strippat <blank> från textrader, men de har tillåtit inledande <blank> före adressen.)

Hanteringen av #-kommentarer skiljer sig från SVID som endast tillåter kommentar som första raden i skriptet, men matchar BSD-deriverade implementationer. Kommentartecknet behandlas som ett kommando och har samma egenskaper vad gäller att accepteras med inledande <blank>; BSD-implementationen har historiskt stött detta.

Tidiga förslag krävde att en script_file skulle ha minst en icke-kommentarrad. Vissa historiska implementationer har betett sig oväntat om så inte var fallet. Standardutvecklarna ansåg detta vara felaktigt och att applikationsutvecklare inte ska behöva undvika funktionen. En korrekt implementation av POSIX.1-2017 ska tillåta script_file som endast består av kommentarrader.

Tidiga förslag angav att om -e och -f blandades så behandlades alla -e före -f. Detta har ändrats till att processa i angiven ordning eftersom det matchar historisk praxis och är mer intuitivt.

Hanteringen av p-flaggan till s skiljer sig mellan System V och BSD-baserade system när standardutmatning är undertryckt. I exemplen:

echo a | sed    's/a/A/p'
echo a | sed -n 's/a/A/p'

anger POSIX.1-2017, BSD, System V-dokumentation och SVID att första exemplet ska skriva två rader med A, medan det andra ska skriva en. Vissa System V-system skriver bara A en gång i båda exemplen eftersom p-flaggan ignoreras om -n inte anges.

Detta var en diametral skillnad mellan system som inte kunde lösas genom att deklarera beteendet som ospecificerat. SVID/BSD/System V-beteendet antogs för POSIX.1-2017 eftersom:

  • Ingen känd historisk dokumentation beskriver interaktionen mellan p-flaggan och -n.
  • Det valda beteendet är mer korrekt eftersom det inte finns någon teknisk motivering för en sådan interaktion. En relation mellan -n och p skulle kunna antyda att de bara används tillsammans, men det ignorerar giltiga skript som bryter cykeln med D, d, q eller branch-kommandon. Sådana skript förlitar sig på p-suffix för att skriva mönsterutrymmet eftersom de inte använder standardutmatningen längst ned i skriptet.
  • Eftersom -n gör p överflödig, skulle en interaktion bara vara användbar om sed-skript var skrivna för att köras både med och utan -n. Det bedöms som osannolikt. Det är ännu mer osannolikt att programmerare har kodat p i tron att den är onödig. Eftersom interaktionen inte var dokumenterad minskar sannolikheten ytterligare att någon upptäckt och förlitat sig på den.
  • Skript som går sönder under det specificerade beteendet producerar för mycket output istället för för lite, vilket är lättare att diagnostisera och rätta.

Formen av substitutionskommandot som använder n-suffix begränsades till de första 512 matchningarna i ett tidigt förslag. Den begränsningen har tagits bort eftersom det inte finns skäl att en redigerare som bearbetar rader av {LINE_MAX}-längd skulle ha en sådan restriktion. Kommandot

s/a/A/2047

ska kunna substituera den 2047:e förekomsten av a på en rad. Kommandona b, t och  : dokumenteras som att ignorera inledande blanktecken, men inget sägs om efterföljande blanktecken. Historiska implementationer har tilldelat olika platser åt etiketterna x och

"x "

. Detta är inte nyttigt och leder till subtila programmeringsfel, men det är historisk praxis och en ändring skulle teoretiskt kunna bryta fungerande skript. Implementatörer uppmuntras att ge varningar om etiketter som aldrig refereras av b eller t, hopp till etiketter som inte finns, och label-argument som riskerar trunkering.

Tidigare versioner av denna standard tillät implementationer med bytes som inte var åtta bitar, men detta har ändrats i denna version.

FRAMTIDA RIKTNINGAR

Inga.

SE ÄVEN

awk(1p), ed(1p), grep(1p)

Base Definitions-delen av POSIX.1-2017: Tabell 5-1 Escape Sequences and Associated Actions, Kapitel 8 Environment Variables, Avsnitt 9.3 Basic Regular Expressions, Avsnitt 12.2 Utility Syntax Guidelines

UPPHOVSRÄTT

Delar av denna text är återtryckta och reproducerade i elektronisk form från IEEE Std 1003.1-2017, Standard for Information Technology — Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 7, 2018 Edition, copyright (C) 2018 av Institute of Electrical and Electronics Engineers, Inc och The Open Group. Vid avvikelse mellan denna version och originalstandarden är originalet från IEEE och The Open Group referensdokument. Originalstandarden kan erhållas online från The Open Group.

Eventuella typografiska eller formateringsfel som förekommer på denna sida har sannolikt introducerats vid konverteringen av källfilerna till man-sidesformat. För att rapportera sådana fel, se dokumentationen om rapportering av buggar för man-pages-projektet.

Sidslut

Orginalhemsidan på Engelska :https://man7.org/linux/man-pages/man1/sed.1p.html


Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp Stockholm som har sponsrat Linux.se med webbhotell.