NÉV¶
tr - karakterek lecserélése, tömörítése
és/vagy törlése
ÁTTEKINTÉS¶
tr [
-cdst] [
--complement] [
--delete]
[
--squeeze-repeats] [
--truncate-set1]
string1
[
string2]
tr [
--help] [
--version]
LEÍRÁS¶
tr átmásolja a szabványos bemenetet a szabványos
kimenetre végrehajtva egyet a következő feladatok
közül:
- • cserél, és választhatóan
tömöríti az eredményben az ismétlődő
karaktereket
• tömöríti az ismétlődő
karaktereket
• karaktereket töröl
• karaktereket töröl, majd tömöríti
az eredményben az ismétlődő karaktereket.
A
string1 és (ha megadott) a
string2 argumentumok egy
rendezett karakterhalmazt határoznak meg, melyre lejebb
SET1
és
SET2-ként hivatkozunk. Ezek a halmazok azok a karakterei a
bemenetnek, melyeken a
tr működni fog. A
--complement
(
-c) opció kicseréli a
SET1-et az ő
komplementerével (az összes karakter, ami nincs a
SET1-ben).
OPCIÓK¶
- -c, --complement
- Kicseréli a SET1-et az ő
komplementerével (az összes karakter, ami nincs a
SET1-ben).
- -d, --delete
- Törli a bejövő karakterek közül
azt, amelyik benne van a SET1-ben, nincs cserélés.
- -s, --squeeze-repeats
- Karaktersorozatot cserél ki egy karakterrel,
miután elvégezte a cserélést vagy a törlést.
Lecserél minden ismétlődő karaktersorozatot, ami benne
van a SET1-ben, a karakter egyszeri
előfordulásával.
- -t, --truncate-set1
- Mielőtt belekezdene a cserélésbe,
először megcsonkítja a SET1-et a SET2
méretére.
- --help
- Használati útmutatót ír a
szabványos kimenetre, majd kilép.
- --version
-
A program verziójáról ír ki információt a
szabványos kimenetre, majd kilép.
KARAKTERHALMAZOK RÉSZLETEZÉSE¶
A
string1 és
string2 argumentumok formátuma
hasonlít a reguláris kifejezések formátumára;
habár nem reguláris kifejezések, csak karakterlisták. A
legtöbb karakter saját magát jelöli ezekben a
füzérekben, de a füzér tartalmazhat lejebb felsorolt
rövidítéseket a kényelem kedvéért.
Néhány ezek közül csak a
string1-ben vagy a
string2-ben használható, lásd lejebb.
Backslash szekvenciák¶
Backslash után egy az alábbiakban fel nem sorolt karaktert írva
hibaüzenetet kapunk.
- \a
- Control-G.
- \b
- Control-H.
- \f
- Control-L.
- \n
- Control-J.
- \r
- Control-M.
- \t
- Control-I.
- \v
- Control-K.
- \OOO
- Az OOO értékű karakter, ahol az
OOO legfeljebb 3 oktális számjegy.
- \\
- Egy backslash.
Tartományok¶
A `
m-
n' jelölés feloldása az
m-től az
n-ig terjedő összes karakter növekvő sorrendben.
m-nek
n előtt kell elhelyezkednie, különben
hibát eredményez. Például a `0-9' megfelel a
`0123456789'-nak. Habár a GNU
tr nem támogatja a System V
szintaxist, ami szögletes zárójeleket használ a
tartományok közrefogására, a cserélés, ami ebben
a formátumban lett megadva működni fog, amennyiben a
zárójelek a
string1-ben összhangban vannak a
string2-ben lévőkkel.
Ismétlődő karakterek¶
A `[
c*
n]' jelölés a
string2-ben a
c
karakter
n-szeri ismétlését jelenti. Így a `[y*6]'
megfelel a `yyyyyy'-nak. A `[
c*]' jelölés a
string2-ben megfelel a
c karakter annyiszoros
másolatának, ahányra szükség van ahhoz, hogy a
SET2 a
SET1-gyel azonos hosszúságú legyen. Ha az
n 0-val kezdődik, akkor oktálisan értelmezi,
egyébként decimálisan.
Karakter osztályok¶
A `[:
class-name:]' jelölés feloldása az összes
class-name (előre definiált) osztálybeli karakter. A
kifejtett karaktereknek nincsen pontos sorrendje, kivéve az `upper'
és `lower' osztályokat, melyek növekvő sorrendben
fejtődnek ki. Amennyiben a
--delete (
-d) és
--squeeze-repeats (
-s) opciók mindegyikét megadta,
bármelyik karakterosztály használható a
string2-ben. Egyébként csak a `lower' és `upper'
adható meg a
string2-ben, és csak akkor, ha a megfelelő
karakterosztályokat (`upper' és `lower',
külön-külön) ugyanazon a relatív helyen adták
meg a
string1-ben. Ez kisbetű-nagybetű
átalakítást hajt végre. Érvénytelen
osztálynév hibát eredményez. Az alábbi
osztálynevek léteznek:
- alnum
- Betűk és számok.
- alpha
- Betűk.
- blank
- Vízszintes fehérszóközök.
- cntrl
- Vezérlő karakterek.
- digit
- Számok.
- graph
- Nyomtatható karakterek, a szóközt
kivéve.
- lower
- Kisbetűk.
- print
- Nyomtatható karakterek, a szóközzel
együtt.
- punct
- Írásjelek.
- space
- Vízszintes vagy függőleges
fehérszóközök.
- upper
- Nagybetűk.
- xdigit
- Hexadecimális számok.
Ekvivalencia osztályok¶
A `[=
c=]' szintaxis feloldása az összes karakternek, ami
egyenértékű a
c karakterrel, nem meghatározott
sorrendben. Az ekvivalencia osztály egy újkeletű
talalmány, ami a nem angol ábécéket szándékozik
támogatni. Viszont úgy látszik, hogy nincs irányadó
módja annak, hogyan definiáljuk vagy határozzuk meg a
tartalmukat. Emiatt nem megvalósított ez a GNU
tr-ben; minden
karakter ekvivalencia osztálya csak saját magából
áll, ami jelenleg hasznavehetetlenné teszi ezt a
lehetőséget.
CSERÉLÉS¶
A
tr cserélést végez, ha a
string1 és a
string2 is megadásra került és a
--delete
(
-d) opció nem lett megadva. A
tr lecseréli a
bemenetének összes karakterét, ami benne van a
SET1-ben,
a
SET2 beli megfelelő karakterre. A karakterek, melyek nem
szerepelnek a
SET1-ben változatlanul maradnak. Amennyiben egy
karakter többször is előfordul a
SET1-ben és az
összes megfelelő karakter nem ugyanaz, akkor az utolsót veszi
csak figyelembe. Például az alábbi két parancs azonos:
Egy gyakori alkalmazása a
tr parancsnak a kisbetűk
nagybetűvé alakítása. Ez megoldható több
módon. Itt van közüllük három:
tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
tr a-z A-Z
tr '[:lower:]' '[:upper:]'
Amikor a
tr cserélést hajt végre, a
SET1-nek
és a
SET2-nek azonos hosszúságúnak kell lennie. Ha
a
SET1 rövidebb a
SET2-nél, a felesleges karaktereket
a
SET2 végéről figyelmen kívül hagyja.
Másrészt, ha a
SET1 hosszabb a
SET2-nél, akkor nem
lesz hordozható a kód; POSIX.2 szerint az eredmény nem
meghatározott. Ebben az esetben a BSD
tr kibővíti a
SET1-t a
SET2 hosszára a
SET2 utolsó
karakterének megfelelő számú ismétlésével.
A System V
tr levágja a
SET1-et a
SET1
hosszára.
Alapértelmezés szerint a GNU
tr ezt az esetet a BSD
tr-jéhez hasonlóan csinálja. Ha a
--truncate-set1
(
-t) opció megadásra került, a GNU
tr a System V
tr-jéhez hasonlóan csinálja. Ezt az opciót
figyelmen kívül hagyja a cserélési eljáráson
kívül.
A System V
tr ebben az esetben megszakítja a relatív gyakori
BSD stílust:
mert ez csak a nulla bájtot fogja átalakítani (az első
tagját a
SET1 komplementerének), ahelyett, hogy az
összes nem alfanumerikus karaktert lecserélné újsor
karakterre.
ISMÉTLŐDÉSEK ÖSSZEHÚZÁSA ÉS
TÖRLÉS¶
Amennyiben csak a
--delete (
-d) opció került
megadásra, a
tr eltávolít minden karaktert, amely a
SET1-ben szerepel.
Amennyiben csak a
--squeeze-repeats (
-s)opció került
megadásra, a
tr lecseréli az összes bemeneti,
SET1-ben lévő karaktersorozatot az egyszeri
előfordulásával.
Amennyiben a
--delete és a
--squeeze-repeats opció is
megadásra került, a
tr először elvégzi a
törlést a
SET1 felhasználásával, majd az
összehúzást a maradék karaktereken a
SET2
felhasználásával.
A
--squeeze-repeats opció a cseréléssel együtt is
használható, ezesetben a
tr először
végrehajtja a cserét, majd összevonja az
ismétlődő karaktereket a
SET2
felhasználásával.
Itt van néhány példa az különböző opciók
variálásának bemutatására:
• Az összes nulla bájt eltávolítása:
tr -d '\000'
• Az összes szó különböző sorokba
bontása. Az összes nem alfanumerikus karaktert újsor karakterre
cseréli, majd az ismétlődő újsor karaktereket
összevonja egyetlenné:
tr -cs '[a-zA-Z0-9]' '[\n*]'
• Az összes ismétlődő újsor karaktert
egyetlenné vonja össze:
• A szavak dupla előfordulásának
megtalálása. Például az emberek gyakran írják a
"the the" ismétlődő szavakat egy újsor
karakterrel elválasztva. Az alábbi bourne shell script
először átkonvertálja az írásjelek és a
szóközök sorozatát egy újsor karakterré,
amitől minden "szó" külön sorba kerül.
Ezután átírja az összes nagybetűt kicsire, és
végül elindítja a
uniq(1) parancsot a
-d
opcióval, hogy csak az ismétlődő szavakat írja ki.
#!/bin/sh
cat "$@" \
| tr -s '[:punct:][:blank:]' '\n' \
| tr '[:upper:]' '[:lower:]' \
| uniq -d
POSIX KOMPATIBILITÁS¶
A POSIXLY_CORRECT környezeti változó
beállításával kikapcsolhatunk számos
figyelmeztető- és hibaüzenetet a szigorúbb POSIX.2
megfelelés érdekében. Az üzenetek normálisan a
következő körülmények között fordulnak
elő:
- 1. Amikor a --delete opciót megadtuk, de a
--squeeze-repeats-t nem, és a string2-t is megadtuk, a
GNU tr alapértelmezés szerint kiír egy
használati üzenetet és kilép, mert a string2
nem kerül felhasználásra. A POSIX specifikáció
szerint a string2-t figyelmen kívül kell hagyni ebben az
esetben. Csendben figyelmen kívül hagyni egy argumentumot rossz
ötlet.
- 2. Amikor egy félreérthető oktális
kód kerül megadásra. Például a \400 egy \40 majd
egy 0, mert a 400 oktális szám nem fér bele egy
bájtba.
Fontos, hogy a GNU
tr nem teljesen kompatibilis a BSD vagy a System V
változattal. Például nincsen opció a [:alpha:], [=c=]
és [c*10] POSIX értelmezések kikapcsolásához. A GNU
tr a nulla karaktert sem törli automatikusan, ellentétben a
tradícionális UNIX variánsokkal, amelyeknél nincs
lehetőség a nulla bájt megvédésére.
MEGJEGYZÉS¶
Hibajelentéseket a
bug-textutils@gnu.org címre küldd.
Ezt a kézikönyv lapot Ragnar Hojland Espinosa
<ragnar@macula.net> írta.
MAGYAR FORDÍTÁS¶
Nagy Ernő <ned@elte.hu>