Sed: Skillnad mellan sidversioner
Hoppa till navigering
Hoppa till sök
Admin (diskussion | bidrag) (Skapade sidan med ' ''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 ==== se...') |
Admin (diskussion | bidrag) |
||
Rad 706: | Rad 706: | ||
IEEE/The Open Group 2017 ''SED'' (1P) | IEEE/The Open Group 2017 ''SED'' (1P) | ||
Se Också | |||
[[sed, en strömredigerare]] | |||
[[Kategori:Linux kommando]] |
Nuvarande version från 22 februari 2024 kl. 07.46
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å