Это было протестировано в El Capitan и в High Sierra коллеги в стандартном терминале (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'').
Чтобы уточнить: «ОШИБКИ» — это заголовок раздела на этой (и других) справочных страницах. Для заголовков разделов поиск работает только для первых двух символов; это согласуется с несколькими названиями разделов, которые мы пробовали. Для остального контента, grep
кажется, работает так, как ожидалось.
Я подключился по ssh к Linux-системе, отличной от BSD (Amazon Linux), и, похоже, она не ведет себя так же.
Что тут происходит?
Вы можете увидеть, что происходит, если просмотрите необработанные коды на странице руководства. Один из способов сделать это — экспортировать справочную страницу в файл и напрямую проверить его содержимое:
man ls > man.ls
nano man.ls
Слово «ОШИБКИ» на самом деле выглядит в файле так:
B^HBU^HUG^HGS^HS
Вы увидите, что заголовки содержат символы форматирования, поэтому слово «ОШИБКИ» отсутствует целиком.
Если вы хотите получить доступ к текстовому содержимому страницы руководства, вы можете использовать команду
man -P cat <thepage>
Опция -P
устанавливает пейджер на другом unix и cat
будет игнорировать информацию о форматировании, давая вывод в виде открытого текста. Однако это не работает в macOS, поэтому для вывода требуется ручной col -b
шаг в конвейере:
man ls | col -b | grep BUGS
man ls | col -b | grep "BUGS"
), я смог получить то, что хотел.nroff
команда для перевода, если вам нужно grep
- не возражаете, если я дополню это тем, как передать правильную команду в groff
via man
?man -P cat ls | grep BUGS
работает идентично man ls | grep BUGS
, оба ничего не возвращают.troff
/ groff
/ nroff
отформатировал вывод. Также недостаточно удалить символы возврата (вы получите «BBUUGGSS»), вам нужно в первую очередь убедить средство форматирования не генерировать их.man man
предлагает направить вывод col -b
, чтобы разумно удалить пробелы, и man ls | col -b | grep BUGS
действительно работает в моей системе (CentOS Linux). Не уверен, что эта команда доступна в MacOS.man -P "less -p BUGS" ls
?grotty
которые не позволят ему выдавать управляющие последовательности TTY-37 или ECMA48.
муру
man foo | grep bar
, я получаю не отвечающий конвейер (и, возможно, испорченный терминал для загрузки). :/ mandb man , который вы обычно видите в Linux, более разумен.JdeBP