Isso foi testado em El Capitan e na High Sierra de um colega, no terminal padrão (bash).
user@hostname ~ $ man ls | grep "BU"
BUGS
user@hostname ~ $ man ls | grep "BUG"
user@hostname ~ $
user@hostname ~ $ man ls | grep "IEEE"
files in order to be compatible with the IEEE Std 1003.2 (``POSIX.2'')
The ls utility conforms to IEEE Std 1003.1-2001 (``POSIX.1'').
Para esclarecer: "BUGS" é um título de seção nessas (e várias outras) páginas de manual. Para títulos de seção, o grepping parece funcionar apenas para os 2 primeiros caracteres; isso é consistente em alguns títulos de seção diferentes que tentamos. Para o restante do conteúdo, grep
parece funcionar como esperado.
Ssh'd em uma caixa Linux não com sabor BSD (Amazon Linux) e não parece exibir o mesmo comportamento.
O que está acontecendo aqui?
macos
terminal
command-line
open-source
man
Jonathan Merklin
fonte
fonte
man foo | grep bar
, eu recebo um pipeline sem resposta (e talvez um terminal bagunçado para inicializar). : / mandb man , que é o que você geralmente vê no Linux, é mais sensato.Respostas:
Você pode ver o que está acontecendo se visualizar os códigos brutos em uma página de manual. Uma maneira de fazer isso é exportar a página do manual para um arquivo e inspecionar seu conteúdo diretamente:
A palavra "BUGS" se parece com isso no arquivo:
Você verá que os cabeçalhos contêm caracteres de formatação; portanto, a palavra inteira "BUGS" não está presente.
Se você deseja acessar o conteúdo de texto sem formatação da página de manual, pode usar o comando
A
-P
opção define o pager em outro unix ecat
ignorará as informações de formatação, fornecendo uma saída de texto sem formatação. No entanto, isso não parece funcionar no macOS, portanto, a saída precisa de umacol -b
etapa manual no pipeline:fonte
man ls | col -b | grep "BUGS"
), consegui o que queria.nroff
comando para traduzir isso, se você precisargrep
- você se importaria se eu expandisse isso com como passar o comando correto paragroff
viaman
?man -P cat ls | grep BUGS
funciona de forma idênticaman ls | grep BUGS
, ambos não retornam nada.grotty
impedir que ele emita sequências de controle TTY-37 ou ECMA48.