tr
är ett kommandoradsverktyg i Linux och Unix-system som översätter, raderar och klämmer tecken från standardinmatningen och skriver resultatet till standardutmatningen.
kommandottr
kan utföra operationer som att ta bort upprepade tecken, konvertera stora bokstäver till små bokstäver och grundläggande tecken som ersätter och tar bort. Vanligtvis används den i kombination med andra kommandon genom rörledningar.,
i denna handledning visar vi dig hur du använder kommandottr
genom praktiska exempel och detaljerade förklaringar av de vanligaste alternativen.
så här använder du kommandot tr #
syntaxen för kommandot tr
är som följer:
tr OPTION... SET1
tr
accepterar två uppsättningar tecken, vanligtvis med samma längd, och ersätter tecknen i de första uppsättningarna med motsvarande tecken från de första uppsättningarna.andra set.,
aSET
är i grunden en teckensträng, inklusive de speciella backslash-escaped-tecknen.
i följande exempel kommer tr
att ersätta alla tecken från standardinmatningen (linuxize) genom att mappa tecknen från den första uppsättningen med matchande dem från den andra uppsättningen.,
echo 'linuxize' | tr 'lin' 'red'
varje förekomst avl
ersätts medr
,i
mede
ochn
medn
med :
reduxeze
teckenuppsättningarna kan också definieras med hjälp av teckenintervall., Till exempel, istället för att skriva:
echo 'linuxize' | tr 'lmno' 'wxyz'
Du kan använda:
När -c
(--complement
) används alternativet, tr
ersätter alla tecken som inte är skrivna.i SET1.
i exemplet nedan kommer alla tecken utom ”li” att ersättas med det sista tecknet från den andra uppsättningen:
echo 'linuxize' | tr -c 'li' 'xy'
liyyyiyyy
som du kanske har märkt har utmatningen ovan ett mer synligt tecken än inmatningen., Detta beror på att kommandot echo
skriver ut ett osynligt newline-tecken \n
som också ersätts med y
. För att echo en sträng utan en ny linje, använd alternativet -n
.
alternativet-d
(--delete
) talar om förtr
att ta bort tecken som anges i SET1. När du tar bort tecken utan att klämma, ange endast en uppsättning.,
kommandot nedan tar bortl
,i
ochz
tecken:
echo 'Linuxize' | tr -d 'liz'
tecknetL
raderas inte eftersom inmatningen innehåller ett versalerL
medanl
– tecknet i uppsättningen är gement.
Lnuxe
alternativet-s
(--squeeze-repeats
) ersätter en sekvens av upprepade händelser med teckenuppsättningen i den senaste uppsättningen.,
i följande exempel tartr
bort de upprepade mellanslagstecken:
echo "GNU \ Linux" | tr -s ' '
GNU \ Linux
När SET2 används ersätts sekvensen av tecknet som anges i SET1 med SET2.
echo "GNU \ Linux" | tr -s ' ' '_'
GNU_\_Linux
alternativet -t
(--truncate-set1
) tvingar tr
att trunkera SET1 till längden på SET2 innan du utför vidare bearbetning.,
som standard kommer om SET1 är större än SET2 tr
att återanvända det sista tecknet i SET2. Här är ett exempel:
echo 'Linux ize' | tr 'abcde' '12'
utmatningen visar att tecknet e
från SET1 matchas med det senaste tecknet i SET2, vilket är 2
:
Linux iz2
använd nu samma kommando med -t
alternativ:
echo 'Linux ize' | tr -t 'abcde' '12'
Linux ize
Du kan se att de tre sista tecknen i uppsättningen1 tas bort., SET1 blir ”ab”, samma längd som SET2, och ingen ersättning görs.
kombinera alternativ #
kommandottr
låter dig också kombinera sina alternativ. Till exempel ersätter följande kommando först alla tecken utom i
med 0
och pressar sedan upprepade 0
tecken:
echo 'Linux ize' | tr -cs 'i' '0'
0i0i0
Tr Command Examples #
i det här avsnittet täcker vi några exempel på vanliga användningar av kommandot tr
.,
konvertera gemener till versaler #
konvertera gemener till versaler eller omvänt är ett av de typiska användningsfallen för kommandot tr
. matchar alla gemener och
matchar alla versaler.
echo 'Linuxize' | tr '' ''
LINUXIZE
i stället för teckenklasser kan du också använda intervall:
echo 'Linuxize' | tr 'a-z' 'A-Z'
för att konvertera övre Fodral till nedre fodral, helt enkelt byta plats på uppsättningarna.,
ta bort alla icke-numeriska tecken #
följande kommando tar bort alla icke-numeriska tecken:
echo "my phone is 123-456-7890" | tr -cd
står för alla siffriga tecken, och genom att använda alternativet
-c
tar kommandot bort alla icke-siffriga tecken.,kommer att se ut så här:
1234567890
Lägg varje ord i en ny rad #
för att sätta varje ord i en ny rad måste vi matcha alla icke-alfanumeriska tecken och ersätta dem med en ny rad:
echo 'GNU is an operating system' | tr -cs '' '\n'
GNUisanoperatingsystem
ta bort tomma rader # för att ta bort de tomma raderna trycker du bara på repetitiva newline-tecken:
tr -s '\n' < file.txt > new_file.txt
tr -s '\n' < file.txt > new_file.txt
i kommandot ovan använder vi omdirigeringssymbolen<
för att skicka innehållet ifile.txt
till kommandottr
., Omdirigeringen>
skriver utdata från kommandot tillnew_file.txt
.
Skriv ut $PATH kataloger på en separat rad #
miljövariabeln$PATH
är en kolon avgränsad lista över kataloger som talar om för skalet vilka kataloger att söka efter körbara filer när du skriver ett kommando.,
för att skriva ut varje katalog på en separat rad måste vi matcha kolon (:
) och ersätta den med den nya raden:
echo $PATH | tr ':' '\n'
/usr/local/sbin/usr/local/bin/usr/sbin/usr/bin/sbin/bin
slutsats #
tr
är ett kommando för att översätta eller radera tecken.
även om det är mycket användbart kan tr
endast fungera med enstaka tecken. För mer komplex mönstermatchning och strängmanipulation bör du använda sed
eller awk
.