Perché i titoli delle sezioni delle pagine man non sono completamente greppabili?

13

Questo è stato testato in El Capitan e nella High Sierra di un collega, nel Terminal standard (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'').

Per chiarire: "BUGS" è un titolo di sezione in quella (e varie altre) manpage. Per i titoli delle sezioni, il grepping sembra funzionare solo per i primi 2 caratteri; questo è coerente con alcuni titoli di sezione diversi che abbiamo provato. Per il resto del contenuto, grep sembra funzionare come previsto.

I ssh'd in una scatola Linux non BSD (Amazon Linux) e non sembra mostrare lo stesso comportamento.

Che sta succedendo qui?

    
posta Jonathan Merklin 25.06.2018 - 22:39
fonte

1 risposta

15

Puoi vedere cosa sta succedendo se visualizzi i codici grezzi all'interno di una pagina man. Un modo per farlo è esportare la pagina man in un file e controllarne direttamente il contenuto:

man ls > man.ls
nano man.ls

La parola "BUGS" appare in questo modo nel file:

B^HBU^HUG^HGS^HS

Vedrai che le intestazioni contengono caratteri di formattazione, quindi l'intera parola "BUG" non è presente.

Se vuoi accedere ai contenuti in testo normale della pagina di manuale, puoi usare il comando

man -P cat <thepage>

L'opzione -P imposta il cercapersone su un altro unix e cat ignorerà le informazioni di formattazione, fornendo un output in testo normale. Tuttavia, questo non sembra funzionare su macOS, quindi l'output necessita di un passaggio manuale col -b nella pipeline:

man ls | col -b | grep BUGS
    
risposta data 25.06.2018 - 22:58
fonte

Leggi altre domande sui tag