tr(1p)

Från Wiki.linux.se -Linux wikipedia på Svenska.
Version från den 18 april 2026 kl. 06.23 av Admin (diskussion | bidrag)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök

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 \oktal representerar 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 en charclass-definition i kategorin LC_CTYPE.
När både -d och -s anges ska vilket som helst av teckenklassnamnen accepteras i sträng2. Annars är endast teckenklassnamnen lower eller upper giltiga i sträng2, och då endast om motsvarande teckenklass (upper respektive lower) 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ån toupper-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ån tolower-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 -d och -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 -C anges 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 -c anges 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 -C anges tillsammans med -d ska alla tecken utom de som anges av sträng1 tas bort. Innehållet i sträng2 ignoreras, om inte även -s anges.
  • När -c anges tillsammans med -d ska alla värden utom de som anges av sträng1 tas bort. Innehållet i sträng2 ignoreras, om inte även -s anges.
  • Samma sträng kan inte användas både för -d och -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

  1. Följande exempel skapar en lista över alla ord i fil1, ett per rad i fil2, där ett ord definieras som en maximal sträng av bokstäver.

tr -cs "[:alpha:]" "[\n*]" <fil1 >fil2

  1. Nästa exempel översätter alla gemena bokstäver i fil1 till versaler och skriver resultatet till standard ut.

tr "[:lower:]" "[:upper:]" <fil1

  1. Detta exempel använder en ekvivalensklass för att identifiera accentvarianter av grundtecknet e i fil1, som rensas från diakritiska tecken och skrivs till fil2.

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.