Lit bébé sur les expressions régulières PERL

Par thème:


Chapitre 6.4. Les expressions régulières

6.4.1. syntaxe d'expression régulière

Les expressions régulières sont des modèles pour rechercher des combinaisons déterminées de symboles dans les chaînes de texte et les remplacer par d' autres combinaisons de caractères (ces opérations sont appelées la mise en correspondance de motif et substitution). L'expression régulière PERL regards de langue

  / Motif / modificateurs 

Ici motif - une chaîne spécifiant une expression régulière, et les modificateurs - en option à une lettre modificateurs , la définition de règles pour l'utilisation des expressions régulières.

Une expression régulière peut consister en caractères ordinaires; auquel cas il correspondra à la combinaison prédéterminée de caractères dans la chaîne. Par exemple, l'expression / chat / correspond aux chaînes sélectionnées dans les lignes suivantes: "app de chat", "pour le chat", "chat en elle." Cependant, la vraie puissance des expressions régulières Perl donne en interne la possibilité d'utiliser leurs métacaractères spéciaux.

Tableau 6.9. Métacaractères dans des expressions régulières
symbole description
\ Pour les caractères qui sont habituellement traités littéralement, indique que le caractère suivant est un métacaractère. Par exemple, / n / est la lettre n, et / \ n / correspond à un saut de ligne.
Pour les méta-caractères, cela signifie que le caractère doit être pris à la lettre. Par exemple, / ^ / cela signifie que le début de la chaîne, et / \ ^ / ^ correspond à un caractère. / \\ / Matches backslash \.
^ Match le début de la ligne (Wed modificateur m ).
$ Match de la fin de la ligne (Wed modificateur m ).
. Elle correspond à tout caractère sauf un saut de ligne (Wed modificateur s ).
* Correspond à itérer du symbole précédent zéro ou plusieurs fois.
+ Conforme à une répétition des précédents caractère une ou plusieurs fois.
? Correspond à itérer de symbole précédent zéro ou une fois.
(Pattern) Répond motif de ligne et se souvient du match qu'il trouve .
x | y Matches soit x ou y.
{N} n - un nombre entier non négatif. Correspond exactement n occurrences du caractère précédent.
{N} n - un nombre entier non négatif. Matches n ou plusieurs occurrences du caractère précédent. / X {1} / équivalent / x + /. / X {0} / équivalent / x * /.
{N, m} n et m - négatif numéros. Elle correspond à pas moins de n et m ne dépasse pas les occurrences du caractère précédent. / X {0,1} / équivalent / x? /.
[Xyz] Elle correspond à tout caractère dans le entre crochets.
[^ Xyz] Elle correspond à tout caractère sauf entre crochets.
[A - Z] Correspond à tout caractère dans la plage spécifiée.
[^ A - z] Elle correspond à tout caractère sauf se situent dans la plage spécifiée.
\ a Correspond à une cloche (BEL).
\ A Il correspond seulement au début de la ligne, même avec le modificateur m .
\ b Correspond à une limite de mot, ce qui est. E. Position entre \ w et \ W dans un ordre quelconque.
\ B Correspond une position autre que une limite de mot.
\ X avec Correspond au caractère Ctrl + X. Par exemple, / \ cI / équivalent / \ t /.
\ C Conforme à un octet, même si la directive use utf8.
\ d Les chiffres correspondants. Equivalent à [0-9].
\ D Répond avec des caractères non numériques. Equivalent à [^ 0-9].
\ e Répond avec le caractère d'échappement (ESC).
\ E Fin de transformations \ L, \ Q, \ U .
\ f Correspond au format de transfert de caractères (FF).
\ G Elle correspond à la position dans la chaîne égale à pos ().
\ l Convertit le caractère suivant en minuscules.
\ L Convertit les caractères en minuscules jusqu'à ce que \ E.
\ n Conformes aux sauts de ligne.
\ Propriété p Correspondant caractères Unicode, avec la propriété de la propriété. Si la propriété est définie plusieurs caractères, utilisez la syntaxe \ p {propriété}.
\ P propriété Correspondant caractères Unicode, propriété non-propriété. Si la propriété est définie plusieurs caractères, utilisez la syntaxe \ P {propriété}.
\ Q Ajoute un caractère "\" devant métacaractères \ E.
\ r Correspond à un retour chariot (CR).
\ s Il correspond à l'espace de caractère. Equivalent / [\ f \ n \ r \ t] /.
\ S Correspond à tout caractère non-blanc. Equivalent / [^ \ f \ n \ r \ t] /.
\ t Correspond à un caractère de tabulation (HT).
\ u Convertit le caractère suivant en majuscules.
\ U Convertit les caractères en majuscules jusqu'à ce que \ E.
\ w Conformes aux lettres, des chiffres ou de soulignement. Equivalent / [A-Za-z0-9_] /.
\ W Elle correspond à tout caractère sauf les lettres, des chiffres ou des caractères de soulignement. Equivalent / [^ A-Za-z0-9_] /.
\ X Correspond la séquence de caractères Unicode du personnage principal et un ensemble d'icônes accent. expression équivalente / C <(:? \ PM \ pM *)> /.
\ z En fin de ligne ne correspond qu'à même avec le modificateur m .
\ Z Il ne correspond qu'à la fin d'une chaîne ou les sauts de ligne à la fin de la ligne, même avec le modificateur m .
\ n n - nombre positif. Matches n -s sousChaîne stockées . Si la gauche caractère entre parenthèses avant inférieur à n, et n> 9, puis l'équivalent \ 0 n.
\ N 0 n - nombre octal, pas plus de 377. correspond au caractère avec le code octal n. Par exemple, / \ 011 / équivalent / \ t /.
\ X n n - nombre hexadécimal, composé de deux chiffres. Correspond au caractère avec le code hexadécimal n. Par exemple, / \ x31 / équivalent / 1 /.
\ x {n} nombre hexadécimal composé de quatre chiffres - n. Correspondant caractères Unicode avec le code hexadécimal n. Par exemple, / \ x {2663} / équivalent / ♣ /.

6.4.2. Modificateurs

Différentes opérations avec des expressions régulières utilisent des modificateurs pour affiner l'opération. Cependant, quatre modificateur ont un but commun.

Je
Il ignore la casse des caractères en correspondance de motif. Lors de l' utilisation directive use locale amener les personnages à un registre est faite en vue de la configuration nationale.
m
Examine la chaîne d'origine comme un tampon de quelques lignes de texte, séparés par des sauts de ligne. Cela signifie que métasymboles ^ et $ correspondent pas seulement au début et à la fin de l'ensemble de la ligne, mais le début et la fin d'une ligne de texte délimité par des sauts de ligne.
s
Il traite la chaîne source comme une seule ligne de texte, en ignorant les pauses. Cela signifie que le caractère générique. correspond à tout caractère, y compris un saut de ligne.
x
Il permet l'utilisation des espaces et des commentaires. Les lacunes qui ont pas de caractère \ précédent ou enfermés dans [] sont ignorés. Le symbole # commence un commentaire, qui est ignoré.

6.4.3. Classes Unicode et le caractère POSIX

Nous pouvons utiliser la syntaxe des expressions régulières

  [: Classe:] 

où la classe spécifie le nom de la classe de caractères POSIX, t. e. norme de téléphonie mobile en C. Si vous utilisez directives utilisez utf8 au lieu des classes de caractères POSIX, vous pouvez utiliser des classes de caractères Unicode dans la conception

  \ P {class} 

Le tableau suivant résume toutes les classes de caractères POSIX, les classes de caractères Unicode correspondant et les méta-caractères, si elles existent.

Tableau 6.10. Classes de caractères
POSIX Unicode métacaractère description
alpha IsAlpha courrier
alnum isalnum Lettres et chiffres
ascii isascii caractères ASCII
cntrl IsCntrl les caractères de contrôle
chiffre IsDigit \ d chiffres
graphique IsGraph Lettres, chiffres et ponctuation
inférieur IsLower minuscules
imprimer IsPrint Lettres, chiffres, signes de ponctuation, et l'écart
punct IsPunct ponctuation
espace IsSpace \ s caractères espace
supérieur IsUpper lettres majuscules
mot IsWord \ w Lettres, chiffres et caractères de soulignement
xdigit isxdigit Les chiffres hexadécimaux

Par exemple, le nombre décimal peut spécifier l'une des trois façons suivantes:

  / \ D + /
 / [: Digit:] + /
 / \ P {IsDigit} + / # use utf8 

Pour indiquer que le caractère appartient à une structure de classe donnée utilisée

  [^ Classe:]
 \ P {class}

Par exemple, les expressions suivantes ont la même signification:

  [^ Digit:] \ D \ P {IsDigit}
 [: ^ Espace:] \ S \ P {IsSpace}
 [^ Parole:] \ W \ P {IsWord} 

6.4.4. substring Se souvenir

L'utilisation de parenthèses dans une expression régulière conduit au fait que la sous-chaîne correspondant à la configuration dans les parenthèses sont stockées dans un tampon spécial. Pour accéder à la stockée n -s substring dans une expression régulière est utilisée conception \ n, mais il est - $ n,n peut prendre toute valeur à partir de 1. Toutefois, il convient de rappeler que l'utilisation de l' expression PERL \ 10, \ 11, etc. . d. comme synonymes pour le code de caractère octal \ 010 \ 011 et ainsi de suite. d. l'ambiguïté est autorisée ainsi. Symbole \ 10 est considéré comme un appel à la 10-ème chaîne mémorisée, si en face de lui dans une expression régulière est pas moins de dix parenthèses gauche; sinon, ce caractère avec le code octal 10. Métacaractères \ 1 ... \ 9 sont toujours considérés comme des appels à la chaîne stockée. exemples:

  if (/(.)\1/) {# look pour le premier personnage récurrent
  print " '$ 1' - le premier caractère \ récurrent n";
 }
 if (/ Heure: (..) :( ..) :( ..) /) {# composantes temporelles Extrait
  $ Heures = 1 $;
  $ Minutes = 2 $;
  $ Secondes = 3 $;
 } 

En plus des variables $ 1, $ 2, ... il y a quelques variables spéciales, dans lequel le résultat de la dernière opération avec une expression régulière, comme suit:

variable description
$ & Dernière chaîne correspondante.
`$ La sous-chaîne avant la dernière chaîne correspondante.
$ ' La chaîne après la dernière chaîne.
$ + Dernière chaîne stockée.

Voici un exemple:

  'AAA111BBB222' = ~ / (\ d +) /;
 print "` $ \ n ";  # AAA
 print "$ & \ n";  # 111
 print "$" \ n ";  # BBB222
 print "+ $ \ n";  # 111 

Toutes ces variables spéciales conservent leurs valeurs jusqu'à ce que la fin du bloc englobant ou jusqu'à ce que le prochain succès pattern matching.

6.4.5. échantillons avancés

PERL contient plusieurs structures supplémentaires qui peuvent être utilisés dans les expressions régulières pour leur autonomisation. Tous ces modèles sont entre parenthèses et commencer par? Cela les distingue de la mémoire substring.

(? # Texte)
Commentaire. La structure entière est ignorée.
(? Modificateurs - modificateurs)
Il active ou désactive les spécifiés modificateurs . Modificateurs, debout sur le symbole - sont inclus, debout après lui - off. exemple:
  if (/ aaa /) {...} Comparaison de # est sensible à la casse
 if (/ (i) aaa /?) {...} Comparaison de # insensible 
(?: Pattern)
(? Modificateurs - modificateurs: motif)
vous permet de regrouper des sous-expressions d'expressions régulières sans mémoriser des correspondances trouvées. La deuxième forme est en outre active ou désactive les spécifiés modificateurs . Par exemple, l'expression /ко(?:т|шка)/ - Un raccourci expression /кот|кошка/ .
(? = Pattern)
Conformité avec pressentant sans mémoriser des correspondances trouvées. Par exemple, l'expression /Windows (?=95|98|NT|2000)/ correspond à "Windows" en ligne "Windows 98", mais ne correspond pas à la ligne "Windows 3.1". Après avoir fait correspondre la recherche continue de la position à venir suivant après trouvé la correspondance, sans prévoir.
(?! Pattern)
Le non-respect pressentant sans mémoriser des correspondances trouvées. Par exemple, l'expression /Windows (?!95|98|NT|2000)/ correspond à "Windows" dans la ligne "Windows 3.1", mais ne correspond pas à la suite, «le 98 Windows". Après avoir fait correspondre la recherche continue de la position à venir suivant après trouvé la correspondance, sans prévoir.
(? <= Pattern)
Conformité avec Peeping retour sans mémoriser des correspondances trouvées. Par exemple, l'expression /(?<=\t)\w+/ \ w + / correspond à un mot qui suit le caractère de tabulation et le caractère de tabulation est pas inclus dans $ &. Fragment correspondant Peeping retour devrait avoir une largeur fixe.
(? <! Pattern)
Le non-respect Peeping retour sans mémoriser des correspondances trouvées. Par exemple, l'expression /(?<!\t)\w+/ \ w + / correspond au mot devant lequel il y a un caractère de tabulation. Fragment correspondant Peeping retour devrait avoir une largeur fixe.

6.4.6. Opérations d'expressions régulières

Jusqu'à présent, nous avons conclu les expressions régulières dans les caractères //. En fait, des caractères délimiteurs sont définis par une expression régulière q-opération , que nous appliquons à eux. Cette section décrit en détail toutes les opérations langage Perl avec des expressions régulières.

6.4.6.1. Motif correspondant

  Syntaxe: / motif / modificateurs m / motif / modificateurs 

Cette opération compare la chaîne spécifiée avec le motif de l' échantillon et renvoie true ou false selon le résultat de la comparaison. Compare la chaîne est donnée par l'opérande gauche de = ~ ou ~, par exemple:

  $ MyNumber = '12345';
 if ($ myNumber = ~ / ^ \ d + $ /) {# si la myNumber string $ se compose de chiffres décimaux, alors ...
  ...
 } 

Si la chaîne est pas spécifié, la comparaison est faite avec le contenu de la variable spéciale $ _. En particulier, l'exemple précédent peut être réécrite comme:

  $ _ = '12345';
 if (/ ^ \ d + $ /) {
  ...
 } 

En plus de la norme, on peut utiliser des modificateurs suivants:

modificateur description
c Ne pas réinitialiser la position de recherche en cas d' échec de comparaison (seul modificateur g).
g Cartographie mondiale, t. E. Recherche toutes les occurrences de l'échantillon.
o Compiler une expression régulière qu'une seule fois.

Si l'expression régulière est contenue dans //, le m initial est facultatif. La conception avec le m initial peut être utilisé comme une expression régulière délimiteurs tous les caractères autorisés dans les q-opérations. Utile cas particuliers:

  • Si délimiteurs sont les caractères '', alors le motif de ligne d'interpolation est pas effectuée. Dans d'autres cas, il y a un échantillon d'interpolation et si elle contient des variables, puis pour chaque comparaison fait sa compilation. Pour éviter cela, utilisez le modificateur o (bien sûr, si vous êtes sûr que les valeurs des variables incluses dans l'échantillon restent inchangés).
  • Si délimiteurs sont les caractères ?? Ensuite , appliquez une règle de comparaison seulement .

Si pattern est une chaîne vide, au lieu qu'il utilise le dernier match réussie expression régulière.

S'il n'y a pas de modificateur g et le résultat de la comparaison est affectée à la liste, puis la comparaison infructueuse retourne une liste vide. résultat de comparaison réussie dépend de la présence de parenthèses dans l'échantillon. Sinon, il retourne une liste de (1). Sinon, elle retourne une liste constituée par les valeurs des variables $ 1, $ 2, et ainsi de suite. E., T. E. Une liste de tous les sous-chaîne stockée. L'exemple suivant

  (W1 $, w2 $, repos) = ($ x = ~ /^(\S+)\s+(\S+)\s*(.*)/); 

stocké dans la ligne de la variable $ le premier mot de w1 x $, variable $ w2 son deuxième mot, et la variable $ reste - le reste de la chaîne.

G modificateur comprennent le mode de cartographie globale avec l'échantillon, à savoir. E. Rechercher tous les matches d'affilée. Son comportement dépend du contexte. Si le résultat de la comparaison est affectée à la liste, elle retourne une liste de tous les sous-chaîne stockée. Si l'échantillon ne contient pas de parenthèses, il retourne une liste de tous conforme au modèle comme si elle était complètement enfermé entre parenthèses. L'exemple suivant

  $ _ = "12:23:45";
 @result = / \ d + / g;
 foreach $ elem (@result) {
  print "$ elem \ n";
 } 

affiche des lignes 12, 23 et 45.

Dans un contexte scalaire, une comparaison avec le g modificateur chaque fois que la recherche de la mise en correspondance de motif suivant et renvoie true ou false en fonction du résultat de recherche. Position dans la ligne après le dernier match peut être lu ou modifié la fonction pos (). recherches infructueuses sont réinitialise normalement la position de recherche à zéro, mais nous pouvons éviter cela en ajoutant le modificateur c. changement de ligne réinitialise également la position de recherche en elle.

Des fonctionnalités supplémentaires offertes joker \ G, ce qui est logique que conjointement avec le modificateur g. Ce joker correspond à la position actuelle dans la barre de recherche. Utilisation de dessins m / \ G ... / gc pratique, surtout pour l' écriture des analyseurs lexicaux qui effectuent différentes actions pour rencontré dans les jetons de texte analysés. L'exemple suivant

  $ _ = 'Mot1, word2 et 12345.';
 LOOP:
  {
  print ( "nombre"), refaire LOOP si /\G\d+\b[,.;]?\s*/gc;
  print ( "mot"), refaire LOOP si /\G[A-Za-z0-9]+\b[,.;]?\s*/gc;
  print ( "inconnu"), refaire LOOP si / \ G [^ A-Za-z0-9] + / gc;
  } 

affiche un mot de chaîne Numéro mot mot.

6.4.6.2. Le seul motif correspondant

  La syntaxe est :?
  motif?

  m?  motif?
 

Cette conception est tout à fait similaire à celle de m / motif / à la seule différence avec succès le filtrage est effectué qu'une seule fois entre des appels de fonction de la réinitialisation () . Ceci est utile, par exemple, lorsque nous avons besoin de trouver seule la première occurrence de l'échantillon dans chaque fichier d'un ensemble de visualisation, par exemple:

  while (<>) {
  if (? ^ $?) {
  # ... Traiter la première ligne vide du fichier
  }
 } Continuer {
  réinitialise si eof;  # Réinitialiser le statut ??  au fichier suivant
 } 

6.4.6.3. Création d' une expression régulière

  Syntaxe: / string / modificateurs qr 

Cette conception crée une expression régulière avec la chaîne de texte et des modificateurs modificateurs et compile. Si délimiteurs sont les caractères '', celle de l' interpolation de chaîne est effectuée. Dans d'autres cas, il y a un échantillon d'interpolation et si elle contient des variables, puis pour chaque comparaison fait sa compilation. Pour éviter cela, utilisez le modificateur o (bien sûr, si vous êtes sûr que les valeurs des variables incluses dans l'échantillon restent inchangés).

Une fois créé par une expression régulière peut être utilisé à la fois de manière indépendante et dans le cadre d'autres expressions régulières. exemples:

  $ Re = qr / \ d + /;
 $ String = ~ / \ s * $ {re} \ s * /;  # Passer à une autre expression régulière
 $ String = ~ $ re;  # Utilisation indépendante
 $ String = ~ / $ re /;  # Ditto

 $ Re = qr / $ header / est;
 s / $ re / text /;  # Est le même que s / $ header / text / est 

6.4.6.4. substitution

  Syntaxe: s / motif / chaîne / modificateurs 

Cette opération compare la chaîne spécifiée avec le motif de l' échantillon et remplace les fragments trouvés sur la chaîne. Elle renvoie le nombre de substitutions effectuées ou faux (ou plutôt, une chaîne vide) si la comparaison a échoué. Compare la chaîne est donnée par l'opérande gauche de = ~ ou! ~. Il doit être une variable scalaire, un élément de tableau ou un élément d'un tableau associatif, par exemple:

  $ Path = '/ usr / bin / perl';
 $ Path = ~ s | / usr / bin | / usr local / bin / |; 

Si la chaîne est pas spécifiée, l'opération de substitution est effectuée sur la variable spéciale $ _. En particulier, l'exemple précédent peut être réécrite comme:

  $ _ = '/ Usr / bin / perl';
 s | / usr / bin | / usr local / bin / |; 

En plus de la norme, on peut utiliser des modificateurs suivants:

modificateur description
e traite la chaîne comme une expression Perl interne.
g Substitution globale, ie. E. Remplacer toutes les occurrences de l'échantillon.
o Compiler une expression régulière qu'une seule fois.

Nous pouvons utiliser au lieu de // tout caractère qui est autorisé dans les q-opérations. Si pattern est enfermé dans une paire de supports, la chaîne doit avoir sa propre paire de limiteurs, par exemple s(foo)[bar] ou s<foo>/bar/ .

Si délimiteurs sont les caractères '', alors le motif de ligne d'interpolation est pas effectuée. Dans d'autres cas, il y a un échantillon d'interpolation et si elle contient des variables, puis pour chaque comparaison fait sa compilation. Pour éviter cela, utilisez le modificateur o (bien sûr, si vous êtes sûr que les valeurs des variables incluses dans l'échantillon restent inchangés).

Si pattern est une chaîne vide, au lieu qu'il utilise le dernier match réussie expression régulière.

Par défaut, seul le remplacement du premier trouvé de l'échantillon. Pour remplacer toutes les occurrences de l'échantillon dans une rangée, vous devez utiliser le modificateur g.

Modificateur E indique que la chaîne est l' expression. Dans ce cas, la fonction string eval () est appliquée d' abord, puis on effectue une substitution. exemple:

  $ _ = '123';
 s / \ d + / $ & * 2 / e;  # $ _ = '246'
 s / \ d / $ & * 2 / par exemple;  # Ditto 

Voici quelques exemples typiques de l'opération de substitution. Suppression de commentaires de la forme / * ... * / Texte de Java ou C-programme:

  Programme $ = ~ s {
  / \ * # Début commentaires
  . *?  # Le nombre minimum de caractères
  \ * / # Commentaire Fin
 } [] Gsx; 

Retrait avant ou arrière des espaces dans la chaîne $ var:

  for ($ var) {
  s / ^ \ s + //;
  s / \ s + // $;
 } 

Réorganiser les deux premiers champs dans le $ _. Notez que dans la chaîne de remplacement en utilisant des variables 1 $ et 2 $, non métacaractères \ 1 et \ 2:

  s / ([^] *) * ([^] *) / $ 2 $ 1 /; 

onglets de rechange à des espaces alignés sur les colonnes qui sont des multiples de huit:

  1, tandis que s / \ t + / '' x (longueur ($ &) * 8 - longueur ($ `)% 8) / e; 

6.4.6.5. translitération

  Syntaxe: tr / list1 / list2 / modificateurs y / list1 / list2 / modificateurs 

Translittération est de remplacer tous les caractères de la liste list1 list2 caractères correspondant dans la liste. Elle renvoie le nombre de caractères remplacés ou supprimés. Les listes doivent comporter des caractères et / ou de type individuels az gammes. Pour convertir une chaîne donnée l'opérande gauche de = ~ ou! ~. Il doit être une variable scalaire, un élément de tableau ou un élément d'un tableau associatif, par exemple:

  $ Test = 'ABCDEABCDE';
 $ Test = ~ tr / AZ / az /;  # Remplacement des lettres minuscules en majuscules 

Si la chaîne est pas spécifiée, l'opération de substitution est effectuée sur la variable spéciale $ _. En particulier, l'exemple précédent peut être réécrite comme:

  $ _ = 'ABCDEABCDE';
 tr / AZ / az /; 

Nous pouvons utiliser au lieu de // tout caractère qui est autorisé dans les q-opérations. Si list1 est enfermé dans une paire de parenthèses, list2 doit avoir sa propre paire de délimiteurs, tels que tr(AZ)[az] ou tr<AZ>/az/ .

En règle générale, cette opération est appelée tr. Synonyme y introduit pour les fanatiques éditeur sed et utilisé uniquement par eux. Translittération prend en charge les modificateurs suivants:

modificateur description
c Remplacer les caractères non inclus dans list1.
Supprimer les caractères pour lesquels il n'y a pas de remplacement.
s Retirer les symboles en double au remplacement.
U Convertir en / de codage UTF-8.
C Convertir en / du codage sur un seul octet.

Modificateur C est une translittération de tous les caractères qui ne figurent pas dans la liste list1. Par exemple, l'opération tr/a-zA-Z/ /c / c remplacer tous les caractères qui ne sont pas en caractères latins, avec des espaces.

Par défaut, si List2 plus courte que list1 est, il a complété son dernier caractère, et si elle est vide, elle est prise égale list1 (il est commode de compter le nombre d'une certaine classe de caractères par ligne). D modificateur modifie les règles: tous les personnages de list1, qui ont pas de correspondance dans list2, sont retirés de la ligne. Par exemple, l'opération tr/a-zA-Z//cd cd va supprimer tous les caractères d'une chaîne non-latine caractères.

S modificateur supprime les doublons si plusieurs caractères dans une rangée remplacée par le même caractère, vous sera laissé une seule instance de ce symbole. Par exemple, l'opération tr/ / /s supprime les espaces multiples dans une rangée.

C et U modificateurs sont conçus pour la conversion de caractères à partir du codage de système UTF-8 et vice versa. Le premier indique que le codage d'origine, la seconde - sur le résultat de codage. Par exemple, tr/\0-\xFF//CU code pour une chaîne à partir de l'encodage du système en UTF-8, et tr/\0-\xFF//UC effectue le transcodage inverse.

Translittération se fait sans listes de caractères d'interpolation, afin de l' utiliser , vous devez appeler la fonction eval variable (), par exemple:

  eval "tr / $ oldlist / $ newlist /";