Zostało to przetestowane w El Capitan i w High Sierra kolegi, w standardowym terminalu (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'').
Aby wyjaśnić: „BŁĘDY” to tytuł sekcji na tej (i różnych innych) stronach podręcznika. W przypadku tytułów sekcji grepping wydaje się działać tylko dla pierwszych 2 znaków; jest to spójne w kilku różnych tytułach sekcji, które wypróbowaliśmy. Reszta treści grep
wydaje się działać zgodnie z oczekiwaniami.
Ssh'owałem do Linux-a o smaku innym niż BSD (Amazon Linux) i wygląda na to, że nie zachowuje się tak samo.
Co tu się dzieje?
macos
terminal
command-line
open-source
man
Jonathan Merklin
źródło
źródło
man foo | grep bar
, dostaję nieodpowiadający potok (i może zepsuty terminal do uruchomienia). : / mandb man , który zwykle widzi się w Linuksie, jest bardziej rozsądny.Odpowiedzi:
Możesz zobaczyć, co się dzieje, jeśli przeglądasz nieprzetworzone kody na stronie podręcznika. Jednym ze sposobów jest wyeksportowanie strony man do pliku i bezpośrednie sprawdzenie jej zawartości:
Słowo „BŁĘDY” faktycznie wygląda tak w tym pliku:
Zobaczysz, że nagłówki zawierają znaki formatujące, więc całe słowo „BŁĘDY” nie jest obecne.
Jeśli chcesz uzyskać dostęp do zawartości zwykłego tekstu strony podręcznika, możesz użyć polecenia
-P
Opcja ustawia pager na inne UNIX icat
będzie ignorować informacje o formatowaniu, dając moc zwykłego tekstu. Nie wydaje się to jednak działać w systemie macOS, więc dane wyjściowe wymagają ręcznegocol -b
kroku w potoku:źródło
man ls | col -b | grep "BUGS"
) Byłem w stanie uzyskać to, czego chciałem.nroff
polecenie do przetłumaczenia, jeśli trzebagrep
- czy miałbyś coś przeciwko, gdybym rozszerzył to o to, jak przekazać poprawne poleceniegroff
przezman
?man -P cat ls | grep BUGS
działa identycznieman ls | grep BUGS
, obie nic nie zwracają.grotty
, które powstrzymają go przed emitowaniem sekwencji kontrolnych TTY-37 lub ECMA48.