Irgendeine Idee, was das verursachen könnte? Ohne grep werden nur die ISO-Codes und der leere Raum angezeigt.
Befehl: ./trans --id --input /path/to/txt | grep ISO | grep [a-z]
root@box /test # alias grep
alias grep='grep --color=auto'
root@box /test # type grep
grep is aliased to `grep --color=auto'
Normale Ausgabe:
grep
terminal
pipe
escape-characters
Freedo
quelle
quelle
grep
s und das Ergebnis vonalias grep
und auszuführentype grep
?Antworten:
Der Screenshot scheint verstümmelte ANSI-Farbcodes zu zeigen, die die Textwiedergabe steuern. Fett / heller Text wird mit der Sequenz erzeugt
␛[1m
, die normalerweise von Ihrem Terminal interpretiert und nicht direkt auf dem Bildschirm angezeigt wird: Sie bringt nur die nächste Textstelle zum Leuchten. Der Screenshot der ungrep
ped Ausgabe zeigt den Farbunterschied zwischen den Beschriftungen und Werten in jeder Zeile, sodass die ursprüngliche Ausgabe diese verwendet.Es scheint, dass diese Sequenz von Ihrem Finale unterbrochen wurde
grep
, das mit dem "m" im Code übereinstimmt (da es ein Buchstabe ist[a-z]
) und versucht hat, ihn selbst rot hervorzuheben. Dadurch blieb eine teilweise Escape-Sequenz zurück, die Ihr Terminal nicht verarbeiten konnte.Das Escape-Zeichen
␛
ist U + 001B. Hierbei handelt es sich um die Hexadezimalzahl, die in den Feldern für unbekannte Zeichen ausgegeben wird. Was angezeigt wird, ist das Escape (das Kästchen), a[
, a1
, ein Rot,m
gefolgt von dem erwarteten passenden Text "eng", und dasselbe passiert am Ende mit "22" (dem numerischen Code für "normale Farbe und Intensität").Die kaputte Ausgabe ist wirklich:
wo
␛[31m
macht Text rot und␛[22m
dreht es auf Weiß zurück, eingefügt sowohlgrep
um diem
Zeichen in den ursprünglichen Text. Das Original war nur:Das ist nur hell "
eng
" und dann ein Wechsel zurück zum normalen Text.Sie können dies überprüfen, indem Sie Ihr final
grep
ingrep --color=always
undhexdump
piping in ändern , in denen alle nicht druckbaren Zeichen und die von Ihrem Terminal interpretierten Zeichen angezeigt werden.Sie können auf verschiedene Arten damit umgehen. Eine davon ist
grep
für den Moment ohne Ihren Alias zu verwenden:Der Backslash überspringt vorübergehend den Alias und wird
grep
direkt ausgeführt.Eine andere Möglichkeit besteht darin, die ANSI-Codes aus dem ursprünglichen Befehl zu entfernen, für die es in dieser Frage einige Vorschläge gibt :
Eine weitere Option besteht darin, am Ende ein überflüssiges Rohr hinzuzufügen:
Da die
grep
Ausgabe des Finales nicht direkt zum TTY, sonderncat
über eine Pipe erfolgt, wird die farbige Hervorhebung nicht eingefügt.Vielleicht ist es die beste Option, Translate Shell zu veranlassen, die Verwendung von Terminal-Steuersequenzen in der eigenen Ausgabe zu beenden, wenn es sich nicht um ein Terminal handelt. Das würde einen Fehlerbericht von Ihnen an die Autoren und eine Code-Korrektur für die
ansi()
Funktion von Translate Shell beinhalten, aber man kann etwas dagegen unternehmen:Damit wird der
dumb
Terminaltyp in der Umgebung von Translate Shell übergeben, der zumindest als nicht ECMA-48-Farbunterstützung eingestuft wird. (Leider verwendet Translate Shell kein terminfo und verdrahtet lediglich in seinem eigenen Code die Terminaltypen, die es versteht, und die von ihm verwendeten Steuersequenzen.)quelle
GREP_COLOR
oderGREP_COLORS
Umgebungsvariable sein, die komplette SGR-Escape-Sequenzen enthält, anstatt nur die Zahlen.--color=no
das abschließende Grep hinzufügen (oder es anwendenTERM=dumb
)