Чому заголовки розділів довідкових сторінок не є повністю привабливими?


14

Це було випробувано в Ель-Капітан і в колезі Висока Сьєрра, в стандартному терміналі (баш).

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'').

Для уточнення: "BUGS" - це назва розділу в цих (та різних інших) вікнах. Для заголовків розділів, схоже, що для перших 2 символів працює лише клацання; це узгоджується з кількома різними назвами розділів, які ми намагалися. Решта вмісту, grepздається, працює як очікувалося.

Я потрапив у коробку Linux із ароматизованим BSD (Amazon Linux), і, схоже, не проявляє такої ж поведінки.

Що тут відбувається?


Це є причиною того, що я ненавиджу людину BSD. Він форматує текст і запускає пейджер навіть тоді, коли його вихід є трубою. І мій пейджер vim, тому Лінус забороняв мені коли-небудь man foo | grep barробити, я отримую невідповідний конвеєр (і, можливо, заплутаний термінал для завантаження). : / mandb man , що зазвичай ви бачите в Linux, є більш розумним.
муру

unix.stackexchange.com/questions/371062 - це також питання MacOS.
JdeBP

Відповіді:


15

Ви можете бачити, що відбувається, якщо переглядати необроблені коди на сторінці "man". Один із способів зробити це - експортувати довідкову сторінку у файл та безпосередньо перевіряти її вміст:

man ls > man.ls
nano man.ls

Слово "BUGS" насправді виглядає так у файлі:

B^HBU^HUG^HGS^HS

Ви побачите, що заголовки містять символи форматування, тож усього слова "BUGS" немає.


Якщо ви хочете отримати доступ до вмісту простого тексту на сторінці керівництва, ви можете скористатися командою

man -P cat <thepage>

Цей -Pпараметр встановлює пейджер на інший unix і catігнорує інформацію про форматування, даючи вихід з простого тексту. Однак, схоже, це не працює на macOS, тому для виводу потрібен col -bкрок в трубопроводі:

man ls | col -b | grep BUGS

2
Дякую Скот! Перше, що я спробував, повинен був перенаправити файл і відкрити його в текстовому редакторі. Використовуючи цю інформацію та інформацію з unix.stackexchange.com/a/15866 (тобто man ls | col -b | grep "BUGS"), я зміг отримати те, що хотів.
Джонатан Мерклін

7
Святий молі, сміливий - стара епоха TTY та друкарська машинка, наберіть літеру та зворотній простір і введіть лист ще раз, знаючи, що вони не вишикуються ідеально і відкладуть більше чорнила. Повинна бути nroffкоманда для перекладу, що, якщо вам потрібно grep , ви б заперечували, якби я розширив це, як передати правильну команду groffчерез man?
bmike

@Kroltan +10 і +10, щоб також скотт. Ось так елегантніше, ніж те, як я не думав зняти цю конкретну кішку.
bmike

@Kroltan Hmmm - для мене man -P cat ls | grep BUGSпрацює однаково man ls | grep BUGS, обидва нічого не повертають.
Скотт

1
Для ручних систем, що використовують GNU roff, дійсно є варіанти, grottyякі не дозволять йому випускати послідовності управління TTY-37 або ECMA48.
JdeBP
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.