Pourquoi les titres des sections des pages de manuel ne sont-ils pas complètement acceptables?

14

Cela a été testé à El Capitan et dans la High Sierra d'un collègue, dans le 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'').

Pour clarifier: "BUGS" est un titre de section dans ces pages de manuel (et diverses autres). Pour les titres de section, le grepping ne semble fonctionner que pour les 2 premiers caractères; cela est cohérent dans quelques titres de section différents que nous avons essayés. Pour le reste du contenu, grepsemble fonctionner comme prévu.

J'ai pénétré dans une boîte Linux non BSD (Amazon Linux) et il ne semble pas présenter le même comportement.

Que se passe t-il ici?

Jonathan Merklin
la source
Cela fait partie de la raison pour laquelle je déteste l'homme BSD. Il formate le texte et exécute le pageur même lorsque sa sortie est un tuyau. Et mon téléavertisseur est vim, donc Linus ne le fait jamais man foo | grep bar, je reçois un pipeline qui ne répond pas (et peut-être un terminal foiré pour démarrer). : / mandb man , ce que vous voyez habituellement sous Linux, est plus sensé.
muru
unix.stackexchange.com/questions/371062 est également une question MacOS.
JdeBP

Réponses:

15

Vous pouvez voir ce qui se passe si vous affichez les codes bruts dans une page de manuel. Pour cela, vous pouvez exporter la page de manuel dans un fichier et inspecter directement son contenu:

man ls > man.ls
nano man.ls

Le mot "BUGS" ressemble en fait à ceci dans le fichier:

B^HBU^HUG^HGS^HS

Vous verrez que les en-têtes contiennent des caractères de mise en forme, donc le mot entier "BUGS" n'est pas présent.


Si vous souhaitez accéder au contenu en texte brut de la page de manuel, vous pouvez utiliser la commande

man -P cat <thepage>

L' -Poption définit le pager sur un autre Unix et catignorera les informations de formatage, donnant une sortie en texte brut. Cependant, cela ne semble pas fonctionner sur macOS, donc la sortie nécessite une col -bétape manuelle dans le pipeline:

man ls | col -b | grep BUGS
Écossais
la source
2
Merci Scot! Rediriger vers un fichier et ouvrir dans un éditeur de texte aurait dû être la première chose que j'essayais. En utilisant ces informations et les informations de unix.stackexchange.com/a/15866 (c'est-à-dire man ls | col -b | grep "BUGS"), j'ai pu obtenir ce que je voulais.
Jonathan Merklin
7
Holy moly, le gras est l'ancienne époque des ATS et de la machine à écrire, tapez une lettre et un retour arrière et tapez à nouveau la lettre, sachant qu'ils ne s'aligneront pas parfaitement et déposeront plus d'encre. Il doit y avoir une nroffcommande pour traduire cela si vous en avez besoin grep - cela vous dérangerait si j'expliquais cela avec la façon de passer la commande correcte à groffvia man?
bmike
@Kroltan +10 et +10 pour scot aussi. C'est bien plus élégant que la façon dont je ne pensais pas écorcher ce chat en particulier.
bmike
@Kroltan Hmmm - pour moi, man -P cat ls | grep BUGSfonctionne à l'identique man ls | grep BUGS, les deux ne renvoient rien.
Scot
1
Pour les systèmes manuels qui utilisent GNU roff, il existe en effet des options grottyqui l'empêcheront d'émettre des séquences de contrôle TTY-37 ou ECMA48.
JdeBP du