Não tenho certeza se algo mudou no meu sistema, mas acho que filtrar as páginas de manual do Unix por meio do meu grep
comando não está funcionando. Você sabe o que há de errado?
Por exemplo, considere a página de manual jq compilada a partir do código a seguir.
.
.IP "\(bu" 4
\fB\-\-slurp\fR/\fB\-s\fR:
.
.IP
Instead of running the filter for each JSON object in the input, read the entire input stream into a large array and run the filter just once\.
.
Se eu quiser procurar rapidamente o --slurp
switch, geralmente filtro a jq
página de manual, grep
como mostra a sessão de terminal a seguir.
$ man jq | grep -- --slurp
$
Observe como nada é retornado. Isso é estranho, o resultado esperado é algo como o seguinte.
$ man jq | grep -- --slurp
• --slurp/-s:
Isso é esperado porque, se eu realmente executar man jq
o comando e usar o /
pressionamento de tecla de pesquisa, procure por --slurp
, isso funcionará.
# ...
• --slurp/-s:
Instead of running the filter for each JSON object in the input, read the entire input stream into a large array and run the filter just once.
Acho que há um problema com caracteres especiais, mas não tenho certeza. Tentei colocar a página de manual por meio cat
do comando, mas também não funcionou. Também tentei remover todos os caracteres especiais - consulte Como remover todos os caracteres especiais no texto do Linux - mas também não funcionou.
$ man jq | cat | grep -- --slurp
$
$ man jq | sed $'s/[^[:print:]\t]//g' | grep -- --slurp
$
Caso isso seja relevante, consulte os seguintes detalhes sobre o meu sistema.
$ neofetch --off
OS: macOS 13.0.1 22A400 x86_64
Host: MacBookPro16,1
Kernel: 22.1.0
Uptime: 6 days, 1 hour, 3 mins
Packages: 145 (brew)
Shell: bash 3.2.57
Resolution: 1792x1120@2x
DE: Aqua
WM: Quartz Compositor
WM Theme: Blue (Light)
Terminal: iTerm2
Terminal Font: Monaco 12
CPU: Intel i7-9750H (12) @ 2.60GHz
GPU: Intel UHD Graphics 630, AMD Radeon Pro 5300M
Memory: 10425MiB / 16384MiB
Eu vi a mesma coisa que você no meu laptop Mac. Eu costumava
man -P cat
definir o pager como cat em vez de definir as variáveis de ambientePAGER
ouMANPAGER
. Ao procurar na página do manual porman
, encontrei isso perto do final:Então eu tentei
man jq | col -b | grep slurp
e consegui as linhas nelesslurp
, incluindo as--slurp
linhas de argumento.Acho que a melhor pista é a frase na página do manual ' sem backspaces e sublinhados '. Com certeza, se eu permitir dois caracteres entre cada letra de
slurp
, vejo as linhas que espero:Usando
od -a
para examinar uma das linhas com--slurp
me dá isso:É a parte de uma linha que diz
Use --slurpfile instead.
O renderizador aparentemente usa backspace e imprime a letra novamente para representar a impressão em negrito da string--slurpfile
. O backspace e a letra extra são o que derrotou seus comandos grep simples. (Meu também)Portanto, parece que canalizar a página de manual
col -b
antesgrep
permitirá que você pesquise a saída da maneira que desejar.