Dies wurde in El Capitan und in 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) Manpages. Bei Abschnittstiteln scheint Grepping nur für die ersten 2 Zeichen zu funktionieren; Dies ist bei einigen verschiedenen Abschnittstiteln, die wir ausprobiert haben, konsistent. Der Rest des Inhalts grep
scheint wie erwartet zu funktionieren.
Ich habe ssh in eine nicht-BSD-ähnliche Linux-Box (Amazon Linux) und es scheint nicht das gleiche Verhalten zu zeigen.
Was ist hier los?
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 ihren Inhalt direkt zu überprüfen:
man ls > man.ls
nano man.ls
Das Wort "BUGS" sieht in der Datei tatsächlich so aus:
B^HBU^HUG^HGS^HS
Sie werden sehen, dass die Kopfzeilen 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
man -P cat <thepage>
Die -P
Option setzt den Pager auf ein anderes Unix und cat
ignoriert die Formatierungsinformationen und gibt eine Klartextausgabe aus. Dies scheint jedoch unter macOS nicht zu funktionieren, sodass die Ausgabe einen manuellen col -b
Schritt in der Pipeline erfordert:
man ls | col -b | grep BUGS
man ls | col -b | grep "BUGS"
) konnte ich bekommen, was ich wollte.nroff
Befehl geben, um das zu übersetzen, wenn Sie es brauchen grep
- hätten Sie etwas dagegen, wenn ich dies um die Übergabe des richtigen Befehls an groff
via erweitern würde man
?man -P cat ls | grep BUGS
funktioniert es identisch mit man ls | grep BUGS
, beide geben nichts zurück.troff
/ groff
/ nroff
die Ausgabe formatiert hat. Es reicht auch nicht aus, die Backspace-Zeichen zu entfernen (Sie erhalten "BBUUGGSS"), Sie müssen den Formatierer davon überzeugen, sie gar nicht erst zu generieren.man man
schlägt vor, die Ausgabe col -b
durchzuleiten, um die Backspaces intelligent zu entfernen, und man ls | col -b | grep BUGS
funktioniert tatsächlich auf meinem (CentOS Linux) System. Nicht sicher, ob dieser Befehl unter MacOS verfügbar ist.man -P "less -p BUGS" ls
?grotty
dass entweder TTY-37- oder ECMA48-Steuersequenzen ausgegeben werden.
Muru
man foo | grep bar
, ich bekomme eine nicht reagierende Pipeline (und vielleicht ein durcheinandergebrachtes Terminal zum Booten). :/ mandb man , was Sie normalerweise unter Linux sehen, ist vernünftiger.JdeBP