Se aggiungi | sed -n la quel tailcomando, per mostrare caratteri non stampabili, probabilmente vedrai qualcosa di simile:
N\bNA\bAM\bME\bE
Cioè, ogni personaggio è scritto come XBackspace X. Sui terminali moderni, il personaggio finisce per essere scritto su se stesso (poiché Backspace aka BS aka \baka ^Hè il personaggio che sposta il cursore di una colonna a sinistra) senza alcuna differenza. Ma negli antichi tele-macchine da scrivere, ciò farebbe apparire il personaggio in grassetto poiché ottiene il doppio di inchiostro.
Tuttavia, ai cercapersone piace more/ lesscapisce che quel formato significhi grassetto, quindi è ancora ciò che rofffa produrre grassetto.
Alcune implementazioni man chiamerebbero roffin modo tale che quelle sequenze non vengano utilizzate (o chiamate internamente col -b -p -xper eliminarle come nel caso man-dbdell'implementazione (a meno che non MAN_KEEP_FORMATTINGsia impostata la variabile d'ambiente)) e non invochino un cercapersone quando rilevano l'output non sta andando a un terminale (quindi man bash | grep NAMEfunzionerebbe lì), ma non il tuo.
Puoi usare col -bper rimuovere quelle sequenze (ci sono anche altri tipi ( _BS X) per sottolineare).
Per i sistemi che usano GNU roff(come GNU o FreeBSD), puoi evitare di usare quelle sequenze in primo luogo assicurandoti che le -c -b -uopzioni siano passate grotty, ad esempio assicurandoti che le -P-cbuopzioni siano passate a groff.
Ad esempio creando uno script wrapper chiamato groffcontenente:
#! /bin/sh -
exec /usr/bin/groff -P-cbu "$@"
Che hai inserito in / usr / bin / groff $PATH.
Con macOS ' man(anche usando GNU roff), puoi creare un man-no-overstrike.confcon:
NROFF /usr/bin/groff -mandoc -Tutf8 -P-cbu
E chiama mancome:
man -C man-no-overstrike.conf bash | grep NAME
Sempre con GNU roff, se si imposta la GROFF_SGRvariabile di ambiente (o non si imposta la GROFF_NO_SGRvariabile a seconda di come sono stati impostati i valori predefiniti al momento della compilazione), allora grotty(purché non venga passata l' -copzione) si useranno invece le sequenze di escape del terminale SGR ANSI di quei trucchi BS per gli attributi dei personaggi. lesscapirli quando viene chiamato con l' -Ropzione.
L'uomo di FreeBSD chiama grottycon l' -copzione a meno che tu non stia chiedendo i colori impostando la variabile MANCOLOR (nel qual caso -cnon viene passato grottye grottyritorna all'impostazione predefinita usando le sequenze di escape ANSI SGR).
MANCOLOR=1 man bash | grep NAME
lavorerà lì.
Su Debian, GROFF_SGR non è l'impostazione predefinita. Se fate:
GROFF_SGR=1 man bash | grep NAME
tuttavia, poiché lo manstdout non è un terminale, si assume anche il compito di passare una GROFF_NO_SGRvariabile a grotty(suppongo che possa essere utilizzata col -bpxper rimuovere le sequenze BS poiché colnon sa come rimuovere le sequenze SGR, anche se è ancora lo fa con MAN_KEEP_FORMATTING) che sovrascrive il nostro GROFF_SGR. Puoi invece fare:
GROFF_SGR=1 MANPAGER='grep NAME' man bash
(in un terminale) per avere le sequenze di escape SGR.
Quella volta, noterai che alcuni di questi NAME appaiono in grassetto sul terminale (e in un less -Rcercapersone). Se dai l'output a sed -n l( MANPAGER='sed -n /NAME/l'), vedrai qualcosa di simile a:
\033[1mNAME\033[0m$
Dov'è \e[1mla sequenza per abilitare il grassetto nei terminali compatibili ANSI e \e[0mla sequenza per ripristinare tutti gli attributi SGR sui valori predefiniti.
Su quel testo grep NAMEfunziona come quel testo contiene NAME, ma potresti ancora avere problemi se cerchi un testo in cui solo parti di esso sono in grassetto / sottolineato ...