Si agrega un comando | sed -n la ese tailcomando, para mostrar caracteres no imprimibles, probablemente verá algo como:
N\bNA\bAM\bME\bE
Es decir, cada personaje está escrito como XRetroceso X. En las terminales modernas, el personaje termina siendo escrito sobre sí mismo (como Backspace aka BS aka \baka ^Hes el personaje que mueve el cursor una columna hacia la izquierda) sin diferencia. Pero en las máquinas de escribir antiguas, eso haría que el personaje apareciera en negrita, ya que recibe el doble de tinta.
Aún así, los localizadores como more/ lessentienden que el formato significa negrita, por lo que sigue siendo eso rofflo que hace que el texto aparezca en negrita.
Algunas implementaciones de hombre llamarían roffde una manera que esas secuencias no se usan (o llamarían internamente col -b -p -xpara despojarlas como en el caso de la man-dbimplementación (a menos que se establezca la MAN_KEEP_FORMATTINGvariable de entorno)), y no invoquen un buscapersonas cuando detecten la salida no va a una terminal (por man bash | grep NAMElo que funcionaría allí), pero no a la suya.
Puede usar col -bpara eliminar esas secuencias (también hay otros tipos ( _BS X) para subrayar).
Para los sistemas que usan GNU roff(como GNU o FreeBSD), puede evitar que esas secuencias se usen en primer lugar asegurándose de -c -b -uque se pasen las opciones grotty, por ejemplo, asegurándose de -P-cbuque se pasen las opciones groff.
Por ejemplo, creando una secuencia de comandos de contenedor llamada que groffcontiene:
#! /bin/sh -
exec /usr/bin/groff -P-cbu "$@"
Que pones delante de / usr / bin / groff $PATH.
Con macOS ' man(también usando GNU roff), puede crear un man-no-overstrike.confcon:
NROFF /usr/bin/groff -mandoc -Tutf8 -P-cbu
Y llama mancomo:
man -C man-no-overstrike.conf bash | grep NAME
Aún con GNU roff, si establece la GROFF_SGRvariable de entorno (o no establece la GROFF_NO_SGRvariable dependiendo de cómo se hayan establecido los valores predeterminados en el momento de la compilación), entonces grotty(siempre que no se pase la -copción) utilizará secuencias de escape de terminal ANSI SGR en su lugar de esos trucos BS para atributos de personaje. lessComprenderlos cuando se llama con la -Ropción.
El hombre de FreeBSD llama grottycon la -copción a menos que esté pidiendo colores configurando la variable MANCOLOR (en cuyo caso -cno se pasa grottyy grottyvuelve al valor predeterminado de usar secuencias de escape ANSI SGR allí).
MANCOLOR=1 man bash | grep NAME
Trabajaré allí.
En Debian, GROFF_SGR no es el valor predeterminado. Si lo haces:
GROFF_SGR=1 man bash | grep NAME
sin embargo, debido a que manstdout no es una terminal, se encarga de pasar también una GROFF_NO_SGRvariable a grotty(supongo que puede usarse col -bpxpara eliminar las secuencias BS ya colque no sabe cómo eliminar las secuencias SGR, aunque todavía lo hace con MAN_KEEP_FORMATTING) que anula nuestra GROFF_SGR. Puedes hacer en su lugar:
GROFF_SGR=1 MANPAGER='grep NAME' man bash
(en un terminal) para tener las secuencias de escape SGR.
Esa vez, notará que algunos de esos NOMBRES aparecen en negrita en el terminal (y en un less -Rbuscapersonas). Si alimenta la salida a sed -n l( MANPAGER='sed -n /NAME/l'), verá algo como:
\033[1mNAME\033[0m$
¿Dónde \e[1mestá la secuencia para habilitar negrita en terminales compatibles con ANSI y \e[0mla secuencia para revertir todos los atributos SGR al valor predeterminado?
En ese texto grep NAMEfunciona como ese texto contiene NAME, pero aún podría tener problemas si busca texto donde solo partes de él están en negrita / subrayado ...