Se você adicionar um | sed -n la esse tailcomando, para mostrar caracteres não imprimíveis, provavelmente verá algo como:
N\bNA\bAM\bME\bE
Ou seja, cada caractere é escrito como XBackspace X. Nos terminais modernos, o caractere acaba sendo escrito sobre si mesmo (como Backspace aka BS aka \baka ^Hé o caractere que move o cursor uma coluna para a esquerda) sem diferença. Mas nas tele-máquinas de escrever antigas, isso faria com que o personagem aparecesse em negrito, pois recebe duas vezes mais tinta.
Ainda assim, os pagers gostam more/ lessentendem esse formato como negrito, e ainda é o que rofffaz com a saída de texto em negrito.
Algumas implementações humanas chamariam de roffmaneira que essas seqüências não sejam usadas (ou chamarão internamente col -b -p -xpara removê-las como no caso da man-dbimplementação (a menos que a MAN_KEEP_FORMATTINGvariável de ambiente esteja definida)) e não invoquem um pager quando detectarem a saída não está indo para um terminal (por man bash | grep NAMEisso funcionaria lá), mas não o seu.
Você pode usar col -bpara remover essas seqüências (existem outros tipos ( _BS X) e também sublinhados).
Para sistemas que usam GNU roff(como GNU ou FreeBSD), você pode evitar que essas sequências sejam usadas em primeiro lugar, certificando-se de que as -c -b -uopções sejam passadas grotty, por exemplo, certificando-se de que as -P-cbuopções sejam passadas groff.
Por exemplo, criando um script de wrapper chamado groffcontendo:
#! /bin/sh -
exec /usr/bin/groff -P-cbu "$@"
Que você coloca à frente de / usr / bin / groff $PATH.
Com o macOS ' man(também usando o GNU roff), você pode criar um man-no-overstrike.confcom:
NROFF /usr/bin/groff -mandoc -Tutf8 -P-cbu
E ligue mancomo:
man -C man-no-overstrike.conf bash | grep NAME
Ainda com o GNU roff, se você definir a GROFF_SGRvariável de ambiente (ou não a GROFF_NO_SGRvariável, dependendo de como os padrões foram definidos no tempo de compilação), então grotty(contanto que não seja aprovada a -copção) usará as seqüências de escape do terminal ANSI SGR desses truques de BS para atributos de caracteres. lessentendê-los quando chamados com a -Ropção
O homem do FreeBSD chama grottycom a -copção, a menos que você esteja solicitando cores , configurando a variável MANCOLOR (nesse caso, -cnão é passada para grottye grottyvolta ao padrão de usar as seqüências de escape ANSI SGR).
MANCOLOR=1 man bash | grep NAME
vai trabalhar lá.
No Debian, GROFF_SGR não é o padrão. Se você fizer:
GROFF_SGR=1 man bash | grep NAME
no entanto, como mano stdout não é um terminal, também é possível passar uma GROFF_NO_SGRvariável para grotty(suponho que ele possa ser usado col -bpxpara extrair as seqüências BS, pois colnão sabe como extrair as seqüências SGR, mesmo que ainda faz isso com MAN_KEEP_FORMATTING) que substitui o nosso GROFF_SGR. Você pode fazer:
GROFF_SGR=1 MANPAGER='grep NAME' man bash
(em um terminal) para ter as seqüências de escape do SGR.
Nesse momento, você notará que alguns desses NOME s aparecem em negrito no terminal (e em um less -Rpager). Se você alimentar a saída para sed -n l( MANPAGER='sed -n /NAME/l'), verá algo como:
\033[1mNAME\033[0m$
Onde \e[1mestá a sequência para ativar negrito nos terminais compatíveis com ANSI e \e[0ma sequência para reverter todos os atributos SGR para o padrão.
Nesse texto grep NAMEfunciona como o texto contém NAME, mas você ainda pode ter problemas se procurar texto em que apenas partes dele estejam em negrito / sublinhado ...