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, grep
semble 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?
macos
terminal
command-line
open-source
man
Jonathan Merklin
la source
la source
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é.Réponses:
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:
Le mot "BUGS" ressemble en fait à ceci dans le fichier:
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
L'
-P
option définit le pager sur un autre Unix etcat
ignorera les informations de formatage, donnant une sortie en texte brut. Cependant, cela ne semble pas fonctionner sur macOS, donc la sortie nécessite unecol -b
étape manuelle dans le pipeline:la source
man ls | col -b | grep "BUGS"
), j'ai pu obtenir ce que je voulais.nroff
commande pour traduire cela si vous en avez besoingrep
- cela vous dérangerait si j'expliquais cela avec la façon de passer la commande correcte àgroff
viaman
?man -P cat ls | grep BUGS
fonctionne à l'identiqueman ls | grep BUGS
, les deux ne renvoient rien.grotty
qui l'empêcheront d'émettre des séquences de contrôle TTY-37 ou ECMA48.