La capture d'écran semble montrer des codes de couleur ANSI mutilés , qui contrôlent le rendu du texte. Le texte en gras / clair est produit avec la séquence ␛[1m
, qui est généralement interprétée par votre terminal et non affichée directement à l'écran: elle rend juste le bit de texte suivant lumineux. La capture d'écran de la grep
sortie non pédale montre cette différence de couleur entre les étiquettes et les valeurs sur chaque ligne, donc la sortie d'origine les utilise.
Il semble que cette séquence a été interrompue par votre finale grep
, qui correspondait au "m" dans le code (puisque c'est une lettre [a-z]
) et a essayé de la mettre en surbrillance en rouge elle-même. Cela a laissé une séquence d'échappement partielle que votre terminal n'a pas pu traiter.
Le caractère d'échappement ␛
est U + 001B, qui est le nombre hexadécimal rendu dans les cases de caractères inconnus. Ce qui est affiché est l'échappement (la boîte), a [
, a 1
, un rouge m
suivi du texte correspondant attendu "eng", et la même chose se produit à la fin avec "22" (le code numérique pour "couleur et intensité normales").
La sortie cassée est vraiment:
␛ [1 ␛ [31m meng ␛ [22m ␛ [22 ␛ [31m m ␛ [22m
où ␛[31m
rend le texte rouge et ␛[22m
le retourne au blanc, tous deux insérés par grep
autour des m
caractères dans le texte d'origine. L'original était juste:
␛ [1m eng ␛ [22m
qui est juste brillant " eng
" puis un retour au texte normal.
Vous pouvez vérifier cela en changeant votre final grep
en grep --color=always
et votre tuyauterie en hexdump
, qui affichera tous les caractères non imprimables et ceux interprétés par votre terminal.
Vous pouvez gérer cela de plusieurs façons. L'une consiste à utiliser grep
sans votre alias pour le moment:
./trans --id --input /path/to/txt | grep ISO | \grep [a-z]
La barre oblique inverse ignore temporairement l'alias et s'exécute grep
directement.
Une autre consiste à supprimer les codes ANSI de la commande d'origine, pour laquelle il existe quelques suggestions dans cette question :
./trans --id --input /path/to/txt | perl -pe 's/\e\[[\d;]*m//g' | grep ISO | grep [a-z]
Encore une autre option consiste à ajouter un tuyau étranger à l'extrémité:
./trans --id --input /path/to/txt | grep ISO | grep [a-z] | cat
Parce que la grep
sortie de la finale n'est pas directement vers le TTY, mais cat
via un tube, elle n'insérera pas la surbrillance colorée.
La meilleure option est peut-être de faire en sorte que Translate Shell cesse d'utiliser les séquences de contrôle de terminal dans sa propre sortie en premier lieu lorsqu'il ne s'agit pas d'un terminal. Cela impliquerait correctement un rapport de bogue de votre part à ses auteurs et un correctif de code pour la ansi()
fonction de Translate Shell , mais on peut le contourner quelque peu:
TERM=dumb ./trans --id --input /path/to/txt | grep ISO | grep [a-z]
Cela passe le dumb
type de terminal dans l'environnement de Translate Shell, qu'il reconnaît au moins comme ne prenant pas en charge les couleurs ECMA-48. (Malheureusement, Translate Shell n'utilise pas terminfo et se contente de câbler dans son propre code les types de terminaux qu'il comprend et les séquences de contrôle qu'il utilise.)