-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathtr.txt
96 lines (90 loc) · 6.19 KB
/
tr.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
┏━━━━━━━━┓
┃ TR ┃
┗━━━━━━━━┛
tr CHAR1aCHAR1b... #Imprime le résultat de la conversion de chaque CHAR1..
CHAR2aCHAR2b... #en CHAR2... (CHAR1a en CHAR2a, CHAR1b eb CHAR2b, etc.)
#de l'input de tr. L'input doit donc être redirigé.
#S'il y a plus de CHAR1... que de CHAR2..., les CHAR1...
#en trop sont convertis par le dernier CHAR2... (ce qui
#permet de ne désigner qu'un CHAR2 pour l'ensemble des
#CHAR1...)
#S'il y a plus de CHAR2... que de CHAR1..., ils sont
#ignorés
#Si un caractère est présent plusieurs fois dans
#CHAR1... seul le dernier compte.
#Les caractères multi-octets sont mal supportés (compris
#comme plusieurs caractères d'un octet chacun)
#CHAR1... ou CHAR2... peut être :
# - un simple caractère, échappé ou non. Cependant :
# - $ & ( ) ; < > = | - [ ] * et espace doivent être
# échappés avec " " ou \
# - ` " et ' doivent être échappés avec \
# - \ doit être noté \\\\
# - une séquence d'échappement backslash. La séquence
# doit elle-même être échappée : "\0" ou \\n.
# Exception : \xNN ne fonctionne pas mais peut être
# utilisé sous la forme $'\xNN'. \e ne fonctionne pas
# non plus
# Null peut donc être utilisé : "\0" (attention
# cependant aux commandes dont est pipé tr, qui
# peuvent supprimer null de leur output, comme echo.
# Voir doc)
# - un range, échappé ou non. Le range ne constitue pas
# un seul CHAR, mais est remplacé par une suite de
# CHAR, ceux compris dans son range. Un range peut
# être :
# - un range CHAR_DEBUT-CHAR_FIN, comme a-z ou 1-5.
# Bizarrement, h semble ignoré de ces ranges.
# CHAR peut être également une séquence
# d'échappement, dont \n ou \12. Cependant :
# - C'est l'ordre ASCII qui détermine le range,
# et CHAR_DEBUT doit être avant CHAR_FIN.
# - Les séquences octales ne doivent pas être
# pas être précédées de trailing zeros (\7 et
# non \07)
# - La séquence entière doit avoir lieu entre
# guillemets si une séquence octale est
# présente : \\0-\\5 ou '\0'-'\5' ne marchent
# pas, but '\0-\5' does
# - une classe POSIX (voir doc) écrite avec une
# seule paire de crochets. Les caractères sont
# remplacés dans leur ordre ASCII. Attention,
# ces ranges commenceront la suite de CHAR les
# constituant par un CHAR null (lequel ne matchera
# pas null, mais aura pour effet de décaler le
# range).
# De plus, seul [:lower:] et [:upper:] sont
# possibles dans CHAR2..., (saus si les options --
# d et -s sont données conjointement) et s'ils y
# sont, ils doivent être couplés dans CHAR1...
# par [:lower:] ou [:upper:]
# - [CHAR*NOMBRE] (inutile dans CHAR1...), est
# remplacé par NOMBRE occurences de CHAR
# - [CHAR*], seulement dans CHAR2..., et seulement
# une fois, est remplacé par n occurences de CHAR,
# où n est égal aux nombres de CHAR1... moins le
# nombre de CHAR2... ([CHAR*] exclus). Si n<0, il
# est ramené à 0
<<<"$VAR" tr ... #Utile.
<FLUX tr -dc ... #Permet de remapper les caractères qui sortent d'un
#flux. Par exemple "< /dev/urandom tr -dc [:digit:] |
#head -c NOMBRE" permet de créer un output de NOMBRE
#chiffres aléatoires
-d #Plutôt que de convertir, supprime chaque occurence de
--delete #CHAR1... dans l'input
#CHAR2... est alors illégal (sauf utilisation de -s)
-s #Si l'input contient plusieurs occurences contigües de
--squeeze-repeats #l'un des CHAR2..., ces occurences sont squeezed en une
#seule occurence, après l'opération de conversion ou de
#suppression.
#CHAR2... peut ne pas être spécifié avec cette option
#(si -d n'est pas spécifié), auquel cas CHAR1... sera
#utilisé au lieu de CHAR1... pour le squeeze, et il n'y
#aura pas de conversion
-c #Inverse la sélection de CHAR1... Seul un caractère peut
-C #alors être utilisé dans CHAR2... Ainsi, tout caractère
--complement #caractère n'étant pas un CHAR1... (dont newline)
#devient CHAR2
-t #Quand il y a plus de CHAR1... que de CHAR2..., ignore
--truncate-set1 #les CHAR1... en trop, plutôt que le comportement par
#défaut