tr(1p): Skillnad mellan sidversioner

Från Wiki.linux.se -Linux wikipedia på Svenska.
Hoppa till navigering Hoppa till sök
(Skapade sidan med '== tr - Ersätt eller ta bort tecken == Kommandot `tr` används för att ersätta eller ta bort tecken från standardinmatning och skriva resultatet till standardutmatning i Unix-liknande operativsystem. === Syntax === tr [ALTERNATIV]... SET1 [SET2] === Beskrivning === Kommandot `tr` läser från standardinmatning och utför teckenöversättning eller borttagning baserat på angivna teckenset och skriver resultatet till standardutmatning. === Alternativ === Kommandot...')
 
Ingen redigeringssammanfattning
 
(En mellanliggande sidversion av samma användare visas inte)
Rad 1: Rad 1:
== tr - Ersätt eller ta bort tecken ==
= tr(1p) =
Kommandot `tr` används för att ersätta eller ta bort tecken från standardinmatning och skriva resultatet till standardutmatning i Unix-liknande operativsystem.


=== Syntax ===
== NAMN ==
tr [ALTERNATIV]... SET1 [SET2]
'''tr''' — översätt tecken


=== Beskrivning ===
== SYNOPSIS ==
Kommandot `tr` läser från standardinmatning och utför teckenöversättning eller borttagning baserat på angivna teckenset och skriver resultatet till standardutmatning.
<code>tr [-c|-C] [-s] sträng1 sträng2</code>


=== Alternativ ===
<code>tr -s [-c|-C] sträng1</code>
Kommandot `tr` stöder flera alternativ som kan användas för att justera dess beteende:


* -c, --complement - Använd komplementet av SET1.
<code>tr -d [-c|-C] sträng1</code>
* -d, --delete - Ta bort tecken i SET1.
* -s, --squeeze-repeats - Ersätt upprepade förekomster av tecken som anges i SET1 med ett enda tecken.
* -t, --truncate-set1 - Trunkera SET1 till samma längd som SET2.


=== Exempel ===
<code>tr -ds [-c|-C] sträng1 sträng2</code>
Här är några praktiska exempel som visar hur du kan använda `tr`-kommandot:


* För att konvertera gemener till versaler:
== BESKRIVNING ==
<code>
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.
echo "hello world" | tr 'a-z' 'A-Z'
</code>


* För att ta bort alla gemener:
== FLAGGOR ==
<code>
Verktyget '''tr''' ska följa Base Definitions-volymen i POSIX.1-2017, avsnitt 12.2, ''Utility Syntax Guidelines''.
echo "Hello World" | tr -d 'a-z'
</code>


* För att ersätta upprepade blanksteg med ett enda blanksteg:
Följande flaggor stöds:
<code>
echo "This  is  a  test" | tr -s ' '
</code>


* För att konvertera tab-tecken till blanksteg:
; <code>-c</code>
<code>
: Komplettera mängden värden som anges av ''sträng1''. Se avsnittet '''UTVIDGAD BESKRIVNING'''.
echo -e "Hello\tWorld" | tr '\t' ' '
</code>


* För att ta bort alla siffror:
; <code>-C</code>
<code>
: Komplettera mängden tecken som anges av ''sträng1''. Se avsnittet '''UTVIDGAD BESKRIVNING'''.
echo "My phone number is 123-456-7890" | tr -d '0-9'
</code>


=== Skillnader mellan macOS och Linux ===
; <code>-d</code>
Det finns några viktiga skillnader att tänka på när man använder `tr`-kommandot på macOS jämfört med Linux:
: Ta bort alla förekomster av indatatecken som anges av ''sträng1''.


* Tillgänglighet: `tr` är tillgängligt både på macOS och Linux, och de flesta alternativ fungerar likadant på båda plattformarna.
; <code>-s</code>
* Alternativ: De flesta alternativ som finns på GNU-versionen av `tr` är också tillgängliga på macOS, men det är bra att konsultera `man`-sidan på din specifika plattform för att vara säker.
: Ersätt upprepade förekomster av tecken med ett enda tecken, enligt beskrivningen i avsnittet '''UTVIDGAD BESKRIVNING'''.
* Hantering av teckenkodningar: Hanteringen av teckenkodningar och reguljära uttryck kan skilja sig något mellan macOS och Linux, vilket kan påverka hur tecken matchas och ersätts.


Exempel på att använda `tr` på macOS:
== OPERANDER ==
* För att konvertera gemener till versaler:
Följande operander stöds:
<code>
echo "hello world" | tr 'a-z' 'A-Z'
</code>


* För att ta bort alla gemener:
; <code>sträng1</code>, <code>sträng2</code>
<code>
: 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.
echo "Hello World" | tr -d 'a-z'
</code>


Det är alltid bra att konsultera `man`-sidan för `tr` på din specifika plattform för att se vilka alternativ och funktioner som är tillgängliga och hur de används.
== STANDARD IN ==
Standard in kan vara vilken filtyp som helst.


=== Felsökning ===
== INDATAFILER ==
Om du får ett felmeddelande när du använder `tr`, kontrollera följande:
Inga.


* Att du använder rätt syntax och alternativ för ditt specifika kommando.
== MILJÖVARIABLER ==
* Att teckensetten du försöker använda är giltiga och korrekt formulerade.
Följande miljövariabler påverkar körningen av '''tr''':
* Att standardinmatningen är korrekt och innehåller tecken som kan matchas och ersättas.


=== Se även ===
; <code>LANG</code>
* [[sed]] - En strömaditor för textmanipulering.
: 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.
* [[awk]] - Ett språk och verktyg för textbehandling.
* [[cut]] - Ta bort sektioner från varje rad i filer.
* [[grep]] - Sök efter mönster i filer.


=== Källor ===
; <code>LC_ALL</code>
* [https://www.gnu.org/software/coreutils/manual/html_node/tr-invocation.html GNU coreutils manual - tr]
: Om satt till en icke-tom sträng åsidosätter den värdena för alla andra internationaliseringsvariabler.
* [https://man7.org/linux/man-pages/man1/tr.1.html tr manual (Linux)]
* [https://ss64.com/osx/tr.html tr manual (macOS)]


[[Kategori:Linuxkommandon]]
; <code>LC_COLLATE</code>
: Bestämmer lokalen för beteendet hos intervalluttryck och ekvivalensklasser.
 
; <code>LC_CTYPE</code>
: Bestämmer lokalen för tolkningen av byteföljder i textdata som tecken, till exempel enbyte- kontra flerbytetecken i argument, och beteendet hos teckenklasser.
 
; <code>LC_MESSAGES</code>
: Bestämmer lokalen som ska användas för format och innehåll i diagnostiska meddelanden som skrivs till standard fel.
 
; <code>NLSPATH</code>
: Bestämmer platsen för meddelandekataloger för behandling av <code>LC_MESSAGES</code>.
 
== 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.
 
; <code>tecken</code>
: Alla tecken som inte beskrivs av någon av konventionerna nedan representerar sig själva.
 
; <code>\oktal</code>
: 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 (<code>01234567</code>). 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.
 
; <code>\tecken</code>
: Escape-sekvenserna i Base Definitions-volymen av POSIX.1-2017, tabell 5-1, ''Escape Sequences and Associated Actions'' (<code>\\</code>, <code>\a</code>, <code>\b</code>, <code>\f</code>, <code>\n</code>, <code>\r</code>, <code>\t</code>, <code>\v</code>) 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.
 
; <code>c-c</code>
: I POSIX-lokalen representerar denna konstruktion intervallet av sorteringselement mellan intervallets ändpunkter, inklusive dessa, så länge ingen ändpunkt är en oktalsekvens av formen <code>\oktal</code>. 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 <code>\oktal</code> representerar detta intervallet av specifika kodade värden mellan ändpunkterna, inklusive dessa.
 
; <code>[:klass:]</code>
: 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'':
 
<pre>
alnum  blank  digit  lower  punct  upper
alpha  cntrl  graph  print  space  xdigit
</pre>
 
: Dessutom ska teckenklassuttryck av formen <code>[:namn:]</code> kännas igen i de lokaler där nyckelordet ''namn'' har fått en <code>charclass</code>-definition i kategorin ''LC_CTYPE''.
 
: När både <code>-d</code> och <code>-s</code> anges ska vilket som helst av teckenklassnamnen accepteras i ''sträng2''. Annars är endast teckenklassnamnen <code>lower</code> eller <code>upper</code> giltiga i ''sträng2'', och då endast om motsvarande teckenklass (<code>upper</code> respektive <code>lower</code>) anges i samma relativa position i ''sträng1''. En sådan specifikation ska tolkas som en begäran om skiftlägeskonvertering.
 
: När <code>[:lower:]</code> förekommer i ''sträng1'' och <code>[:upper:]</code> förekommer i ''sträng2'' ska arrayerna innehålla tecken från <code>toupper</code>-avbildningen i kategorin ''LC_CTYPE'' för den aktuella lokalen. När <code>[:upper:]</code> förekommer i ''sträng1'' och <code>[:lower:]</code> förekommer i ''sträng2'' ska arrayerna innehålla tecken från <code>tolower</code>-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.
 
; <code>[=ekviv=]</code>
: 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 <code>-d</code> och <code>-s</code>. Tecknen som tillhör ekvivalensklassen placeras i arrayen i ospecificerad ordning.
 
; <code>[x*n]</code>
: 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 <code>-d</code> 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 <code>-C</code> 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 <code>-c</code> 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 <code>-d</code> anges:
 
* Indatatecken som finns i arrayen specificerad av ''sträng1'' ska tas bort.
* När <code>-C</code> anges tillsammans med <code>-d</code> ska alla tecken utom de som anges av ''sträng1'' tas bort. Innehållet i ''sträng2'' ignoreras, om inte även <code>-s</code> anges.
* När <code>-c</code> anges tillsammans med <code>-d</code> ska alla värden utom de som anges av ''sträng1'' tas bort. Innehållet i ''sträng2'' ignoreras, om inte även <code>-s</code> anges.
* Samma sträng kan inte användas både för <code>-d</code> och <code>-s</code>. När båda flaggorna anges krävs både ''sträng1'' (för borttagning) och ''sträng2'' (för hoptryckning).
 
När flaggan <code>-s</code> 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:
 
<pre>
tr -s '[:space:]'
</pre>
 
ska arrayen för den sista operanden innehålla alla tecken i den teckenklassen. Vid skiftlägeskonvertering, som i följande exempel:
 
<pre>
tr -s '[:upper:]' '[:lower:]'
</pre>
 
ska arrayen för den sista operanden endast innehålla de tecken som definieras som de andra tecknen i varje <code>toupper</code>- eller <code>tolower</code>-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:
 
* <code>0</code> — all indata behandlades utan fel
* <code>>0</code> — 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:
 
<pre>
tr 0123456789 d
</pre>
 
Detta skulle översätta alla siffror till bokstaven <code>d</code>. 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:
 
<pre>
tr 0123456789 '[d*]'
</pre>
 
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:
 
<pre>
tr -d '\000'
</pre>
 
== EXEMPEL ==
# Följande exempel skapar en lista över alla ord i <code>fil1</code>, ett per rad i <code>fil2</code>, där ett ord definieras som en maximal sträng av bokstäver.
#:<pre>
tr -cs "[:alpha:]" "[\n*]" <fil1 >fil2
</pre>
# Nästa exempel översätter alla gemena bokstäver i <code>fil1</code> till versaler och skriver resultatet till standard ut.
#:<pre>
tr "[:lower:]" "[:upper:]" <fil1
</pre>
# Detta exempel använder en ekvivalensklass för att identifiera accentvarianter av grundtecknet <code>e</code> i <code>fil1</code>, som rensas från diakritiska tecken och skrivs till <code>fil2</code>.
#:<pre>
tr "[=e=]" "[e*]" <fil1 >fil2
</pre>
 
== MOTIVERING ==
I vissa tidiga förslag lades en uttrycklig flagga <code>-n</code> 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 <code>-n</code> 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 <code>tr -d '\000'</code>.
 
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 <code>[:klass:]</code> och <code>[=ekviv=]</code> 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 <code>[:klass:]</code> och <code>[=ekviv=]</code> betraktas som syntaktiska element i nivå med <code>[x*n]</code>, 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:
 
<pre>
tr '[a-z]' '[A-Z]'
</pre>
 
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:
 
<pre>
tr a-z A-Z
</pre>
 
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 <code>"a-z"</code> representerar de tre tecknen <code>a</code>, <code>-</code> och <code>z</code> skrivas om som <code>"az-"</code>.
 
Standarden ISO POSIX-2:1993 hade en flagga <code>-c</code> som betedde sig på liknande sätt som flaggan <code>-C</code>, men som inte gav funktionalitet motsvarande flaggan <code>-c</code> 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 ==
* [[sed(1p)]]
 
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/
<BR><BR>Tack till [https://Pc-service.se PC Service] som har  sponsrat [https://www.linux.se Linux.se] med webbhotell.
 
[[Kategori:Linuxmanual grupp 1]]
[[Kategori:Linuxmanual]]

Nuvarande version från 18 april 2026 kl. 06.23

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.