매뉴얼 페이지의 섹션 제목이 완전히 잘리지 않는 이유는 무엇입니까?


14

이것은 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'').

명확히하기 위해 : "BUGS"는 그 (및 다양한 다른) 맨 페이지의 섹션 제목입니다. 섹션 제목의 경우 grepping은 처음 2 자에 대해서만 작동하는 것 같습니다. 이것은 우리가 시도한 몇 가지 다른 섹션 제목에서 일관됩니다. 나머지 내용 grep은 예상대로 작동하는 것 같습니다.

BSD가 아닌 Linux 상자 (Amazon Linux)에 넣었고 동일한 동작을 보이지 않는 것 같습니다.

무슨 일이야?


이것이 제가 BSD 맨을 싫어하는 이유의 일부입니다. 출력이 파이프 인 경우에도 텍스트를 형식화하고 호출기를 실행합니다. 그리고 내 호출기는 vim이므로 Linus는 내가 한 man foo | grep bar일을 금지했습니다 . : / mandb man 은 Linux에서 일반적으로 볼 수있는 것이 더 현명합니다.
muru

unix.stackexchange.com/questions/371062 또한 MacOS 질문입니다.
JdeBP

답변:


15

매뉴얼 페이지에서 원시 코드를 보면 무슨 일이 일어나고 있는지 확인할 수 있습니다. 이를 수행하는 한 가지 방법은 매뉴얼 페이지를 파일로 내보내고 내용을 직접 검사하는 것입니다.

man ls > man.ls
nano man.ls

"BUGS"라는 단어는 실제로 파일에서 다음과 같습니다.

B^HBU^HUG^HGS^HS

헤더에 서식 문자가 포함되어 있으므로 전체 단어 "BUGS"가 없습니다.


매뉴얼 페이지의 일반 텍스트 내용에 액세스하려면 다음 명령을 사용할 수 있습니다

man -P cat <thepage>

-P옵션은 호출기를 다른 유닉스에 설정하고 cat형식 정보를 무시하고 일반 텍스트 출력을 제공합니다. 그러나 이것은 macOS에서 작동하지 않는 것 같으므로 출력 col -b에는 파이프 라인에서 수동 단계가 필요합니다 .

man ls | col -b | grep BUGS

2
감사합니다 Scot! 파일로 리디렉션하고 텍스트 편집기에서 여는 것이 가장 먼저 시도한 것입니다. 해당 정보와 unix.stackexchange.com/a/15866 의 정보를 사용하여 (예 :)man ls | col -b | grep "BUGS" 원하는 것을 얻을 수있었습니다.
Jonathan Merklin

7
거룩한 대담한, 굵은 글씨체는 오래된 TTY와 타자기 시대입니다. 글자와 백 스페이스를 입력하고 글자를 다시 입력하십시오. 이있을거야 nroff당신이 필요로하는 경우 있음을 번역하는 명령 grep I가 올바른 명령을 전달하는 방법으로이 확장 될까요 것 - groff을 통해 man?
bmike

@Kroltan +10 및 +10도 scot에. 내가이 특정 고양이를 벗기는 생각을하지 않은 것보다 더 우아합니다.
bmike

@ Kroltan Hmmm-나에게 man -P cat ls | grep BUGS동일하게 작동하며 man ls | grep BUGS둘 다 아무것도 반환하지 않습니다.
Scot

1
GNU roff를 사용하는 수동 시스템의 경우 실제로 grottyTTY-37 또는 ECMA48 제어 순서를 방출하지 못하게하는 옵션이 있습니다 .
JdeBP
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.