tr(1p)
tr(1p)
NAMN
tr — översätt tecken
SYNOPSIS
tr [-c|-C] [-s] sträng1 sträng2
tr -s [-c|-C] sträng1
tr -d [-c|-C] sträng1
tr -ds [-c|-C] sträng1 sträng2
BESKRIVNING
Verktyget tr kopierar standard in till standard ut med substitution eller borttagning av valda tecken. De angivna flaggorna och operanderna sträng1 och sträng2 styr de översättningar som sker medan tecken och sorteringselement med ett enda tecken kopieras.
FLAGGOR
Verktyget tr ska följa Base Definitions-volymen i POSIX.1-2017, avsnitt 12.2, Utility Syntax Guidelines.
Följande flaggor stöds:
-c- Komplettera mängden värden som anges av sträng1. Se avsnittet UTVIDGAD BESKRIVNING.
-C- Komplettera mängden tecken som anges av sträng1. Se avsnittet UTVIDGAD BESKRIVNING.
-d- Ta bort alla förekomster av indatatecken som anges av sträng1.
-s- Ersätt upprepade förekomster av tecken med ett enda tecken, enligt beskrivningen i avsnittet UTVIDGAD BESKRIVNING.
OPERANDER
Följande operander stöds:
sträng1,sträng2- Kontrollsträngar för översättning. Varje sträng representerar en mängd tecken som omvandlas till en teckenarray som används för översättningen. Se avsnittet UTVIDGAD BESKRIVNING för detaljer om hur strängarna tolkas.
STANDARD IN
Standard in kan vara vilken filtyp som helst.
INDATAFILER
Inga.
MILJÖVARIABLER
Följande miljövariabler påverkar körningen av tr:
LANG- Ger ett standardvärde för internationaliseringsvariabler som är osatta eller tomma. Se Base Definitions-volymen i POSIX.1-2017, avsnitt 8.2, Internationalization Variables, för prioritetsordningen mellan internationaliseringsvariabler.
LC_ALL- Om satt till en icke-tom sträng åsidosätter den värdena för alla andra internationaliseringsvariabler.
LC_COLLATE- Bestämmer lokalen för beteendet hos intervalluttryck och ekvivalensklasser.
LC_CTYPE- Bestämmer lokalen för tolkningen av byteföljder i textdata som tecken, till exempel enbyte- kontra flerbytetecken i argument, och beteendet hos teckenklasser.
LC_MESSAGES- Bestämmer lokalen som ska användas för format och innehåll i diagnostiska meddelanden som skrivs till standard fel.
NLSPATH- Bestämmer platsen för meddelandekataloger för behandling av
LC_MESSAGES.
ASYNKRONA HÄNDELSER
Standard.
STANDARD UTMATNING
Utmatningen från tr ska vara identisk med indata, med undantag för de angivna transformationerna.
STANDARD FEL
Standard fel ska endast användas för diagnostiska meddelanden.
UTDATAFILER
Inga.
UTVIDGAD BESKRIVNING
Operanderna sträng1 och sträng2 (om de anges) definierar två teckenarrayer. Konstruktionerna i följande lista kan användas för att ange tecken eller sorteringselement med ett enda tecken. Om någon konstruktion resulterar i sorteringselement med flera tecken ska tr utesluta dessa fler-teckenselement från den resulterande arrayen utan diagnostiskt meddelande.
tecken- Alla tecken som inte beskrivs av någon av konventionerna nedan representerar sig själva.
\oktal- Oktalsekvenser kan användas för att representera tecken med specifika kodade värden. En oktalsekvens består av ett omvänt snedstreck följt av den längsta sekvensen av en, två eller tre oktala siffror (
01234567). Sekvensen gör att det värde vars kodning representeras av det en-, två- eller tresiffriga oktala heltalet placeras i arrayen. Flerbytetecken kräver flera sammanfogade escape-sekvenser av denna typ, inklusive inledande omvänt snedstreck för varje byte.
\tecken- Escape-sekvenserna i Base Definitions-volymen av POSIX.1-2017, tabell 5-1, Escape Sequences and Associated Actions (
\\,\a,\b,\f,\n,\r,\t,\v) stöds. Resultatet av att använda andra tecken än en oktal siffra efter det omvända snedstrecket är ospecificerat. Om inget tecken följer efter det omvända snedstrecket är resultatet också ospecificerat.
c-c- I POSIX-lokalen representerar denna konstruktion intervallet av sorteringselement mellan intervallets ändpunkter, inklusive dessa, så länge ingen ändpunkt är en oktalsekvens av formen
\oktal. Tecknen eller sorteringselementen i intervallet placeras i arrayen i stigande sorteringsordning. Om den andra ändpunkten föregår den första i sorteringsordningen är det ospecificerat om intervallet är tomt eller om konstruktionen behandlas som ogiltig. I andra lokaler än POSIX-lokalen är beteendet ospecificerat.
- Om någon eller båda ändpunkterna är oktalsekvenser av formen
\oktalrepresenterar detta intervallet av specifika kodade värden mellan ändpunkterna, inklusive dessa.
[:klass:]- Representerar alla tecken som tillhör den definierade teckenklassen enligt den aktuella inställningen av lokalkategorin LC_CTYPE. Följande klassnamn ska accepteras när de anges i sträng1:
alnum blank digit lower punct upper alpha cntrl graph print space xdigit
- Dessutom ska teckenklassuttryck av formen
[:namn:]kännas igen i de lokaler där nyckelordet namn har fått encharclass-definition i kategorin LC_CTYPE.
- När både
-doch-sanges ska vilket som helst av teckenklassnamnen accepteras i sträng2. Annars är endast teckenklassnamnenlowerelleruppergiltiga i sträng2, och då endast om motsvarande teckenklass (upperrespektivelower) anges i samma relativa position i sträng1. En sådan specifikation ska tolkas som en begäran om skiftlägeskonvertering.
- När
[:lower:]förekommer i sträng1 och[:upper:]förekommer i sträng2 ska arrayerna innehålla tecken fråntoupper-avbildningen i kategorin LC_CTYPE för den aktuella lokalen. När[:upper:]förekommer i sträng1 och[:lower:]förekommer i sträng2 ska arrayerna innehålla tecken fråntolower-avbildningen i kategorin LC_CTYPE för den aktuella lokalen. Det första tecknet från varje avbildningspar ska finnas i arrayen för sträng1 och det andra i arrayen för sträng2 på samma relativa position.
- Med undantag för skiftlägeskonvertering ska tecknen som anges av ett teckenklassuttryck placeras i arrayen i ospecificerad ordning.
- Om namnet som anges för klass inte definierar en giltig teckenklass i den aktuella lokalen är beteendet odefinierat.
[=ekviv=]- Representerar alla tecken eller sorteringselement som tillhör samma ekvivalensklass som ekviv, enligt den aktuella inställningen av lokalkategorin LC_COLLATE. Ett ekvivalensklassuttryck får endast användas i sträng1, eller i sträng2 när det används tillsammans med kombinationen
-doch-s. Tecknen som tillhör ekvivalensklassen placeras i arrayen i ospecificerad ordning.
[x*n]- Representerar n upprepade förekomster av tecknet x. Eftersom detta uttryck används för att mappa flera tecken till ett är det endast giltigt i sträng2. Om n utelämnas eller är noll ska det tolkas som tillräckligt stort för att utöka sekvensen baserad på sträng2 till samma längd som sekvensen baserad på sträng1. Om n har inledande nolla ska det tolkas som oktalt värde. Annars ska det tolkas som decimalt värde.
När flaggan -d inte anges:
- Om sträng2 finns ska varje indatatecken som finns i arrayen specificerad av sträng1 ersättas av tecknet i samma relativa position i arrayen specificerad av sträng2. Om arrayen specificerad av sträng2 är kortare än den som specificeras av sträng1, eller om ett tecken förekommer mer än en gång i sträng1, är resultatet ospecificerat.
- Om flaggan
-Canges ska komplementet av tecknen som anges av sträng1 — mängden av alla tecken i den aktuella teckenuppsättningen enligt LC_CTYPE, utom de som faktiskt anges i operanden sträng1 — placeras i arrayen i stigande sorteringsordning enligt LC_COLLATE. - Om flaggan
-canges ska komplementet av värdena som anges av sträng1 placeras i arrayen i stigande ordning efter binärt värde. - Eftersom ordningen för tecken som anges av teckenklassuttryck eller ekvivalensklassuttryck är odefinierad bör sådana uttryck endast användas om avsikten är att mappa flera tecken till ett. Ett undantag är skiftlägeskonvertering som beskrivits ovan.
När flaggan -d anges:
- Indatatecken som finns i arrayen specificerad av sträng1 ska tas bort.
- När
-Canges tillsammans med-dska alla tecken utom de som anges av sträng1 tas bort. Innehållet i sträng2 ignoreras, om inte även-sanges. - När
-canges tillsammans med-dska alla värden utom de som anges av sträng1 tas bort. Innehållet i sträng2 ignoreras, om inte även-sanges. - Samma sträng kan inte användas både för
-doch-s. När båda flaggorna anges krävs både sträng1 (för borttagning) och sträng2 (för hoptryckning).
När flaggan -s anges ska, efter att eventuella borttagningar eller översättningar utförts, upprepade sekvenser av samma tecken ersättas med en enda förekomst av detta tecken, om tecknet finns i arrayen som specificeras av den sista operanden. Om den sista operanden innehåller en teckenklass, som i följande exempel:
tr -s '[:space:]'
ska arrayen för den sista operanden innehålla alla tecken i den teckenklassen. Vid skiftlägeskonvertering, som i följande exempel:
tr -s '[:upper:]' '[:lower:]'
ska arrayen för den sista operanden endast innehålla de tecken som definieras som de andra tecknen i varje toupper- eller tolower-par, beroende på vad som är tillämpligt.
En tom sträng använd för sträng1 eller sträng2 ger odefinierade resultat.
AVSLUTNINGSSTATUS
Följande avslutningsvärden ska returneras:
0— all indata behandlades utan fel>0— ett fel inträffade
KONSEKVENSER AV FEL
Standard.
Följande avsnitt är informativa.
ANVÄNDNING
Vid behov kan sträng1 och sträng2 omges av citationstecken för att undvika mönstermatchning av skalet.
Om en vanlig siffra, som representerar sig själv, ska följa efter en oktalsekvens måste oktalsekvensen använda alla tre siffrorna för att undvika tvetydighet.
När sträng2 är kortare än sträng1 uppstår en skillnad mellan historiska System V- och BSD-system. Ett BSD-system fyller ut sträng2 med det sista tecknet i sträng2. Därför är det möjligt att göra följande:
tr 0123456789 d
Detta skulle översätta alla siffror till bokstaven d. Eftersom detta område uttryckligen är ospecificerat i POSIX.1-2017 är både BSD- och System V-beteendet tillåtna, men ett kompatibelt program kan inte förlita sig på BSD-beteendet. Det måste i stället skriva exemplet så här:
tr 0123456789 '[d*]'
Det bör noteras att strängoperanderna som används av tr, trots yttre likheter, inte är reguljära uttryck.
Till skillnad från vissa historiska implementationer behandlar denna definition av verktyget tr NUL-tecken korrekt i sin indataström. NUL-tecken kan tas bort med:
tr -d '\000'
EXEMPEL
- Följande exempel skapar en lista över alla ord i
fil1, ett per rad ifil2, där ett ord definieras som en maximal sträng av bokstäver.
tr -cs "[:alpha:]" "[\n*]" <fil1 >fil2
- Nästa exempel översätter alla gemena bokstäver i
fil1till versaler och skriver resultatet till standard ut.
tr "[:lower:]" "[:upper:]" <fil1
- Detta exempel använder en ekvivalensklass för att identifiera accentvarianter av grundtecknet
eifil1, som rensas från diakritiska tecken och skrivs tillfil2.
tr "[=e=]" "[e*]" <fil1 >fil2
MOTIVERING
I vissa tidiga förslag lades en uttrycklig flagga -n till för att inaktivera det historiska beteendet att ta bort NUL-tecken från indata. Det ansågs att automatisk borttagning av NUL-tecken inte var korrekt funktionalitet. Att -n senare togs bort innebär dock inte att kravet försvann att tr korrekt ska behandla NUL-tecken i indataströmmen. NUL-tecken kan tas bort med tr -d '\000'.
Historiska implementationer av tr skiljer sig kraftigt åt i syntax och beteende. Till exempel har BSD-versionen inte behövt hakparenteser för repetitionssekvensen. Syntaxen för verktyget tr är närmare baserad på System V- och XPG3-modellen, samtidigt som man försökt ta hänsyn till historiska BSD-implementationer. När det gäller utfyllnad av kort sträng2 beslutades att lämna beteendet ospecificerat för att bevara System V- och XPG3-skript, som annars kunde få problem med BSD-metoden.
Användningen av oktala värden för att specificera styrtecken har historiska förebilder, men är inte portabel. Införandet av escape-sekvenser för styrtecken bör ge nödvändig portabilitet. Det erkänns att detta kan göra att vissa historiska skript slutar fungera.
Ett tidigt förslag innehöll stöd för sorteringselement med flera tecken. Det påpekades dock att även om tr använder vissa syntaktiska element från reguljära uttryck är syftet med tr helt annorlunda. Intervall har till exempel inte samma betydelse. Därför togs det tidigare stödet för sorteringselement med flera tecken bort. Kvar blev intervall i aktuell sorteringsordning, teckenklasser och ekvivalensklasser.
I XPG3 visas konventionerna [:klass:] och [=ekviv=] med dubbla hakparenteser, som i syntax för reguljära uttryck. tr implementerar dock inte principerna för reguljära uttryck, utan lånar bara en del av syntaxen. Därför bör [:klass:] och [=ekviv=] betraktas som syntaktiska element i nivå med [x*n], som inte heller är ett hakparentesuttryck från reguljära uttryck.
Standardutvecklarna kommer att överväga ändringar i tr som gör det möjligt att översätta tecken mellan olika teckenkodningar, eller att tillhandahålla ett nytt verktyg för detta.
På historiska System V-system kräver ett intervalluttryck omgivande hakparenteser, till exempel:
tr '[a-z]' '[A-Z]'
BSD-baserade system krävde däremot inte hakparenteserna, och den konventionen används här för att undvika att stora mängder BSD-skript går sönder:
tr a-z A-Z
Det föregående System V-skriptet fortsätter att fungera eftersom hakparenteserna, behandlade som vanliga tecken, översätts till sig själva. Däremot måste alla System V-skript som förlitade sig på att "a-z" representerar de tre tecknen a, - och z skrivas om som "az-".
Standarden ISO POSIX-2:1993 hade en flagga -c som betedde sig på liknande sätt som flaggan -C, men som inte gav funktionalitet motsvarande flaggan -c specificerad i POSIX.1-2008.
Den tidigare versionen sade också att oktalsekvenser hänvisade till sorteringselement och kunde placeras intill varandra för att ange flerbytetecken. Det noterades dock att detta skapade tvetydighet eftersom tr då inte kunde avgöra om intilliggande oktalsekvenser avsåg flerbytetecken eller flera enskilda byte-tecken. POSIX.1-2008 specificerar därför att oktalsekvenser alltid hänvisar till enskilda binära bytevärden när de används för att ange en ändpunkt i ett intervall av sorteringselement.
Tidigare versioner av denna standard tillät implementationer med byte som inte var åtta bitar, men detta har ändrats i denna version.
FRAMTIDA UTVECKLING
Ingen.
SE ÄVEN
Base Definitions-volymen av POSIX.1-2017, Table 5-1, Escape Sequences and Associated Actions, Chapter 8, Environment Variables, Section 12.2, Utility Syntax Guidelines
UPPHOVSRÄTT
Delar av denna text är återgivna 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.
Om det finns någon avvikelse mellan denna version och den ursprungliga standarden från IEEE och The Open Group, är originalstandarden det styrande dokumentet.
Eventuella typografiska eller formateringsfel i denna sida har sannolikt uppstått vid konvertering av källfilerna till manualsideformat.
Sidslut
Orginalhemsidan på Engelska https://man7.org/linux/man-pages/man1/tr.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 PC Service som har sponsrat Linux.se med webbhotell.