TR

Το tr μετατρέπει χαρακτήρες ανάλογα με τις παραμέτρους που δίνουμε.

tr string1 string2

Μετατρέπει κάθε χαρακτήρα του string1 στον αντίστοιχο του string2. Αν το μήκος του string1 ή του string2 είναι μεγαλύτερο τότε οι επιπλέον χαρακτήρες αγνοούνται. Αν ένας χαρακτήρας επαναλαμβάνεται στο string1 τότε θα αντικατασταθεί σύμφωνα με το χαρακτήρα αντικατάστασης του τελευταίου.

ΠΑΡΑΔΕΙΓΜΑ
tr 'abcd' 'efgh'
Μετατρέπει τον χαρακτήρα a σε e, τον b σε f, τον c σε g και τον d σε h.

tr -c string1 string2

Μετατρέπει όλους τους χαρακτήρες στον τελευταίο χαρακτήρα του string2 (γι' αυτό το string2 θα πρέπει να είναι ένας χαρακτήρας) εκτός από αυτούς που καθορίζονται στο string1.

ΠΑΡΑΔΕΙΓΜΑ
tr -c 'a' 'b'

Μετατρέπει όλους τους χαρακτήρες σε b εκτός από το a.

tr -s string1 string2

Μετατρέπει συνεχόμενους χαρακτήρες που καθορίζονται στο string1 στον αντίστοιχο χαρακτήρα του string2.

ΠΑΡΑΔΕΙΓΜΑ
tr -s '/' '#'

Μετατρέπει συνεχόμενους χαρακτήρες / σε #. Αν το string που δίνουμε σαν είσοδο είναι το 'first/////////second' τότε το αποτέλεσμα θα είναι 'first#second'.

tr -d string1

Αφαιρεί όλους τους χαρακτήρες που καθορίζονται στο string1.

ΠΑΡΑΔΕΙΓΜΑ
tr -d 'aeh'

Αν δώσουμε σαν είσοδο το 'kalhmera' θα πάρουμε 'klmr'.

tr -s string1

Μετατρέπει συνεχόμενους χαρακτήρες που καθορίζονται στο string1 με ένα μόνο ίδιο χαρακτήρα.

ΠΑΡΑΔΕΙΓΜΑ
tr -s 'a'

Αν δώσουμε σαν είσοδο το 'aaaaaa' θα μας επιστρέψει 'a'.

Τις παραμέτρους -c,-s,-d μπορούμε να τις χρησιμοποιήσουμε συνδυαστικά.

Tr -cs string1 string2

Μετατρέπει όλους τους συνεχόμενους χαρακτήρες σε αυτόν που προσδιορίζεται στο string2 (ενός χαρακτήρα) εκτός από αυτούς που καθορίζονται στο string1.

ΠΑΡΑΔΕΙΓΜΑ
Tr -cs 'a' '/'

Αν δώσουμε σαν είσοδο το 'kalhspera' θα μας επιστρέψει '/a/a'.

Aν στην παραπάνω έκφραση δεν προσδιορίσουμε το string2 τότε κάθε χαρακτήρας που επαναλαμβάνεται θα μετατραπεί σε έναν τον ίδιο εκτός από αυτούς που προσδιορίζονται στο string1.

Tr -cs 'a'

Είσοδος 'kkkaaalllhhmerrrra' Έξοδος 'kaaalhmera'

Tr -cd string1

Σβήνει όλους τους χαρακτήρες εκτός από αυτούς που περιλαμβάνονται στο string1.

ΠΑΡΑΔΕΙΓΜΑ
Tr -cd 'ka'

Είσοδος 'kalhmera' Έξοδος 'kaa'

tr -ds string1 string2

Σβήνει τους χαρακτήρες που προσδιορίζονται στο string1 και μετατρέπει συνεχόμενους χαρακτήρες του string2 σε έναν.

ΠΑΡΑΔΕΙΓΜΑ
Tr -ds 'a' 'l'

Είσοδος 'kaallllhmera' Έξοδος 'klhmer'

tr -cds string1 string2

Σβήνει όλους τους χαρακτήρες εκτός από αυτούς που προσδιορίζονται στο string1 και μετατρέπει συνεχόμενους χαρακτήρες που βρίσκονται στο string2 σε έναν. Είναι κατανοητό ότι για να επιδράσει η παρουσία του string2 πρέπει οι χαρακτήρες του να υπάρχουν και στο string1.

ΠΑΡΑΔΕΙΓΜΑ
Tr -cds 'a' 'b'

Είσοδος 'kaaallhmerrra' Έξοδος 'aaaa'

Tr -cds 'a' 'a'

Είσοδος 'kaaallhmerrra' Έξοδος 'a'

Χρήσιμα παραδείγματα και παρατηρήσεις

Μπορούμε να χρησιμοποιήσουμε στα string1 και string2 όχι μόνο χαρακτήρες αλλά και ειδικές εκφράσεις. Έτσι μπορούμε να χρησιμοποιήσουμε το \n για το Enter και το \\ για το \.

Άλλοι ειδικοί χαρακτήρες είναι οι : \a, \b, \f, \r, \t, \v.

Ακόμα μπορούμε να αναπαραστήσουμε τους χαρακτήρες σε οκταδική μορφή χρησιμοποιώντας στην αρχή το \. Για παράδειγμα ο \012 (10 στο δεκαδικό) είναι ο \n.

Έτσι αν θέλουμε ένα κείμενο να το μετατρέψουμε όλο σε μία γραμμή και να ξεχωρίζουμε τις γραμμές με \ τότε θα γράφαμε tr '\n' '\\' < file ή tr '\012' '\\'.

Ακόμα μπορούμε να χρησιμοποιήσουμε εύρος χαρακτήρων. Για παράδειγμα 0-9. Έτσι αν θέλαμε να μετατρέψουμε κάθε ψηφίο στον χαρακτήρα d θα γράφαμε tr '0123456789' 'dddddddddd'. Αν γράφαμε tr '0-9' 'd' τότε θα μετατρέπονταν μόνο το 0. Γι' αυτό το tr δίνει τη δυνατότητα να εξισώσουμε το πλήθος των χαρακτήρων ανάμεσα στα δύο string με το *. Έτσι θα γράφαμε εν συντομία tr '0-9' '[d*]'. Αν δεν βάζαμε το string2 σε αγκύλες (tr '0-9' 'd*') τότε θα μετατρέπονταν ο 0 σε d και ο 1 σε *.

Μία άλλη δυνατότητα είναι να χρησιμοποιήσουμε κλάσεις [:class:] όπου η class μπορεί να είναι μία από τις ακόλουθες : alnum, cntrl, lower, space, alpha, digit, print, upper, blank, graph, punct, xdigit.

Έτσι αντί για tr '0-9' '[d*]' θα μπορούσαμε να γράψουμε tr '[:digit:]' '[d*]' Εύκολα μπορούμε να μετατρέψουμε τα πεζά σε κεφαλαία χρησιμοποιώντας μία από τις παρακάτω εντολές. Tr 'a-z' 'A-Z'
Tr '[:lower:]' '[:upper:]'


Μία άλλη χρήσιμη εντολή είναι να αφαιρέσουμε όλους τους NULL χαρακτήρες. Tr -d '\000'

Μετατροπή αγκύλων σε παρενθέσεις : tr '{}' '()'
Μετατροπή ενός string ψηφίων σε # : tr -s '0-9' '[#*]'
Έτσι αν δώσουμε για είσοδο το it1234ba9734 θα πάρουμε σαν έξοδο it#ba#

Η πιο χρήσιμη λειτουργία της tr είναι η μετατροπή ενός κειμένου σε μία λίστα με κάθε λέξη σε μία γραμμή.
Tr -cs '[:alpha:]' '\n'
Αντί για [:alpha:] μπορούμε να χρησιμοποιήσουμε 'a-zA-Z' και αντί για '\n' να βάλουμε '\012' Έτσι αν δώσουμε για είσοδο το αρχείο file1 δηλαδή tr -cs 'a-zA-Z' '\012' < file1 όπου file1 είναι :

We can count///$ word freqs and9223 ngrams
by122manipulating the pointers/….,without having to follow the
pointers into884;;; the symbol table.

Θα πάρουμε σαν έξοδο :
We
can
count
word
freqs
and
ngrams
by
manipulating
the
pointers
without
having
to
follow
the
pointers
into
the
symbol
table


Επιστροφή