Dies wurde in El Capitan und in der High Sierra eines Kollegen im Standard-Terminal (bash) getestet.
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'').
Zur Verdeutlichung: "BUGS" ist ein Abschnittstitel in dieser (und verschiedenen anderen) Hilfeseiten. Bei Abschnittsüberschriften scheint das Greifen nur für die ersten beiden Zeichen zu funktionieren. Dies ist in einigen verschiedenen Abschnittsüberschriften, die wir ausprobiert haben, konsistent. Für den Rest des Inhalts grep
scheint es wie erwartet zu funktionieren.
Ich habe in eine Linux-Box mit Nicht-BSD-Geschmack (Amazon Linux) geschrieben und es scheint nicht dasselbe Verhalten zu zeigen.
Was ist denn hier los?
macos
terminal
command-line
open-source
man
Jonathan Merklin
quelle
quelle
man foo | grep bar
, dass ich eine nicht reagierende Pipeline bekomme (und vielleicht ein kaputtes Terminal, um hochzufahren). : / mandb man , was Sie normalerweise unter Linux sehen, ist sinnvoller.Antworten:
Sie können sehen, was passiert, wenn Sie die Rohcodes in einer Manpage anzeigen. Eine Möglichkeit, dies zu tun, besteht darin, die Manpage in eine Datei zu exportieren und deren Inhalt direkt zu überprüfen:
Das Wort "BUGS" sieht in der Datei tatsächlich so aus:
Sie werden sehen, dass die Überschriften Formatierungszeichen enthalten, sodass das gesamte Wort "BUGS" nicht vorhanden ist.
Wenn Sie auf den Klartextinhalt der Handbuchseite zugreifen möchten, können Sie den Befehl verwenden
Die
-P
Option setzt den Pager auf ein anderes Unix undcat
ignoriert die Formatierungsinformationen, was eine Klartextausgabe ergibt. Dies scheint jedoch auf macOS nicht zu funktionieren, sodass für die Ausgabe ein manuellercol -b
Schritt in der Pipeline erforderlich ist :quelle
man ls | col -b | grep "BUGS"
) konnte ich das bekommen, was ich wollte.nroff
Befehl geben, der übersetzt werden muss, wenn Sie müssen.grep
Würde es Ihnen etwas ausmachen, wenn ich diesen Befehl um die Übergabe des richtigen Befehls angroff
via erweitern würdeman
?man -P cat ls | grep BUGS
funktioniert das identischman ls | grep BUGS
, beide geben nichts zurück.grotty
dass TTY-37- oder ECMA48-Steuersequenen ausgegeben werden.