Wenn Sie | sed -n ldiesem tailBefehl ein hinzufügen , um nicht druckbare Zeichen anzuzeigen, wird wahrscheinlich Folgendes angezeigt:
N\bNA\bAM\bME\bE
Das heißt, jedes Zeichen wird als XRücktaste geschrieben X. Auf modernen Terminals wird das Zeichen ohne Unterschied über sich selbst geschrieben (da Backspace aka BS aka \baka ^Hdas Zeichen ist, das den Cursor eine Spalte nach links bewegt). Aber in alten Teleschreibmaschinen würde dies dazu führen, dass das Zeichen fett dargestellt wird, da es doppelt so viel Tinte erhält.
Trotzdem verstehen Pager wie more/ less, dass dieses Format fett bedeutet, und das ist es auch, was roffzur Ausgabe von fettem Text verwendet wird.
Einige Implementierungen rufen roffdiese Sequenzen so auf, dass sie nicht verwendet werden (oder rufen col -b -p -xsie intern auf, um sie wie im Fall der man-dbImplementierung zu entfernen (es sei denn, die MAN_KEEP_FORMATTINGUmgebungsvariable ist festgelegt)), und rufen keinen Pager auf, wenn sie die Ausgabe erkennen Ich gehe nicht zu einem Terminal ( man bash | grep NAMEwürde dort also funktionieren), aber nicht zu deinem.
Sie können col -bdiese Sequenzen entfernen (es gibt auch andere Typen ( _BS X) zum Unterstreichen).
Bei Systemen, die GNU verwenden roff(wie GNU oder FreeBSD), können Sie verhindern, dass diese Sequenzen an erster Stelle verwendet werden, indem Sie sicherstellen, dass die -c -b -uOptionen an übergeben werden grotty, beispielsweise indem Sie sicherstellen, dass die -P-cbuOptionen an übergeben werden groff.
Zum Beispiel durch Erstellen eines Wrapper-Skripts mit dem Namen „ groffEnthält:
#! /bin/sh -
exec /usr/bin/groff -P-cbu "$@"
Das hast du vor / usr / bin / groff gesetzt $PATH.
Mit macOS ' man(auch mit GNU roff) können Sie ein man-no-overstrike.confmit:
NROFF /usr/bin/groff -mandoc -Tutf8 -P-cbu
Und ruf an manals:
man -C man-no-overstrike.conf bash | grep NAME
roffWenn Sie bei GNU die GROFF_SGRUmgebungsvariable festlegen (oder die GROFF_NO_SGRVariable nicht festlegen , je nachdem, wie die Standardeinstellungen zum Zeitpunkt der Kompilierung festgelegt wurden), werden stattdessen grotty(sofern diese -cOption nicht übergeben wird ) Escape-Sequenzen für ANSI SGR-Terminals verwendet dieser BS-Tricks für Zeichenattribute. lessVerstehe sie, wenn sie mit der -ROption aufgerufen werden .
Der Benutzer von FreeBSD ruft grottymit der -cOption auf, es sei denn, Sie fordern Farben an, indem Sie die Variable MANCOLOR setzen (in diesem Fall -cwird die Verwendung von ANSI SGR-Escape-Sequenzen dort nicht übernommen grottyund grottyauf die Standardeinstellung zurückgesetzt).
MANCOLOR=1 man bash | grep NAME
wird dort arbeiten.
Unter Debian ist GROFF_SGR nicht die Standardeinstellung. Wenn Sie tun:
GROFF_SGR=1 man bash | grep NAME
Da es sich manbei stdout jedoch nicht um ein Terminal handelt, muss auch eine GROFF_NO_SGRVariable an übergeben werden grotty(ich nehme an, damit können col -bpxdie BS-Sequenzen entfernt werden, da colnicht bekannt ist, wie die SGR-Sequenzen entfernt werden, obwohl dies immer noch der Fall ist tut es mit MAN_KEEP_FORMATTING) was unser überschreibt GROFF_SGR. Sie können stattdessen Folgendes tun:
GROFF_SGR=1 MANPAGER='grep NAME' man bash
(in einem Terminal), um die SGR-Escape-Sequenzen zu erhalten.
Dieses Mal werden Sie feststellen, dass einige dieser NAMEN auf dem Terminal (und in einem less -RPager) fett gedruckt sind. Wenn Sie die Ausgabe an sed -n l( MANPAGER='sed -n /NAME/l') weiterleiten, wird Folgendes angezeigt:
\033[1mNAME\033[0m$
Wo \e[1mist die Reihenfolge, in der in ANSI-kompatiblen Terminals Fettdruck aktiviert werden soll, und \e[0mdie Reihenfolge, in der alle SGR-Attribute auf die Standardwerte zurückgesetzt werden sollen?
Dieser Text grep NAMEfunktioniert so wie der Text enthält NAME, aber Sie könnten trotzdem Probleme haben, wenn Sie nach Text suchen, bei dem nur Teile davon fett / unterstrichen sind ...