Это было проверено в Эль-Капитане и в Высшей Сьерре коллеги, в стандартном Терминале (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'').
Для пояснения: «ОШИБКИ» - это заголовок раздела в этих (и других различных) страницах. Для заголовков разделов grepping работает только для первых 2 символов; это согласуется с несколькими заголовками разделов, которые мы пробовали. Для остальной части контента, grep
кажется, работает как ожидалось.
Я запустил ssh'd в Linux-боксе без вкуса BSD (Amazon Linux), и он, похоже, не демонстрирует такого же поведения.
Что тут происходит?
macos
terminal
command-line
open-source
man
Джонатан Мерклин
источник
источник
man foo | grep bar
, я получаю не отвечающий конвейер (и, возможно, испорченный терминал для загрузки). : / mandb man , который вы обычно видите в Linux, более разумен.Ответы:
Вы можете видеть, что происходит, если вы просматриваете необработанные коды на странице руководства. Один из способов сделать это - экспортировать справочную страницу в файл и напрямую проверить ее содержимое:
Слово «ОШИБКИ» на самом деле выглядит так в файле:
Вы увидите, что заголовки содержат символы форматирования, поэтому полное слово «BUGS» отсутствует.
Если вы хотите получить доступ к текстовому содержимому страницы руководства, вы можете использовать команду
-P
Опция устанавливает пейджер на другом UNIX иcat
будет игнорировать информацию о форматировании, давая выход открытого текста. Однако это не похоже на работу в macOS, поэтому вывод требует ручногоcol -b
шага в конвейере:источник
man ls | col -b | grep "BUGS"
), я смог получить то, что хотел.nroff
команда, чтобы перевести это, если вам нужноgrep
- не возражаете, если бы я расширил это, как передать правильную командуgroff
через viaman
?man -P cat ls | grep BUGS
работает идентичноman ls | grep BUGS
, оба ничего не возвращают.grotty
которые не позволят ему испускать управляющие последовательности TTY-37 или ECMA48.