매뉴얼 페이지를 열고 검색을 수행하는 명령이 작동하지 않는 이유는 무엇입니까? [복사]

매뉴얼 페이지를 열고 검색을 수행하는 명령이 작동하지 않는 이유는 무엇입니까? [복사]

이것매뉴얼 페이지를 열고 단일 명령 내에서 문자열을 검색하십시오.질문의 절반은 내가 하고 싶은 일을 다루고 있습니다.

man chmod를 수행한 다음 /a+x를 수행하여 a+x가 언급된 chmod 매뉴얼 페이지의 첫 번째 부분으로 이동하는 대신 특정 검색 문자열에 대한 매뉴얼 페이지를 여는 방법이 있는지 궁금합니다. vi(m)에서 이를 수행하고 vi +string filename.txt를 실행하는 방법.

선택한 답변은

man foobar | less +/searched_string

그러나 내가 시도할 때

man tmux | less +/^format

출시 횟수는 줄어들었지만 다시 돌아옵니다.

패턴을 찾을 수 없습니다(RETURN 누르기).

왜 패턴을 찾을 수 없나요?


운영 체제 - 우분투 15.10

% less --version
less 458 (GNU regular expressions)
Copyright (C) 1984-2012 Mark Nudelman

답변1

환경 변수를 사용하여 LESS실행 중인 개별 명령을 재정의합니다.

또한보십시오:

LESS='+/LESS[[:space:]]*Options' man less
LESS='+/\+cmd' man less
LESS='+/optional variable assignments' man bash
LESS=+/SIMPLE\ COMMAND\ EXPANSION man bash

나는 또한 얼마 전 메타 게시물에서 이에 대해 더 광범위하게 논의했습니다.


검색 패턴을 생성할 때 기억해야 할 한 가지: 긴 단락의 중간에서 여러 개의 연속 단어를 선택하면 크기가 다른 터미널에서 해당 매뉴얼 페이지를 볼 때 같은 줄에 있지 않을 수 있습니다. 예를 들어, 다음은 전체 화면 터미널에서 작동합니다(내 거모니터), 그러나 단어가 여러 줄에 걸쳐 분할되기 때문에 80열 터미널에서는 그렇지 않습니다.

LESS=+/allowing' a shell script' man bash

다음은 단어 간격이 처리되는 방식 으로 인해 man터미널에서 신뢰할 수 없습니다 .

LESS=+/"The latest version" man bash

다음 두 명령은 동일한 위치에 도달하지만 이식성이 더 좋습니다.

LESS=+/^INVOCATION man bash
LESS=+/^BUG man bash

답변2

문제는 less를 시작하고 검색어를 옵션으로 전달할 때 검색이 대소문자를 구분한다는 것입니다.
따라서 해결책은 동일한 대소문자를 사용하는 검색 패턴을 사용하는 것입니다. 예를 들어 이런 직업은

man tmux | less +/^FORMAT

더 좋음 - 쉘 확장 방지

man tmux | less '+/^FORMAT'

또는 대안적으로

man tmux | less -p '^FORMAT'

배경

less/man을 사용하여 검색할 때마다 검색은 대소문자를 구분하지 않으므로 호출할 때 검색 매개변수를 전달할 때도 동일할 것으로 예상합니다.
Ubuntu에서 사용하는 man 버전에는 -i대소문자를 구분하지 않는 검색 옵션이 덜 켜져 있기 때문인 것 같습니다.
따라서 이 옵션 없이 less를 호출하면 less라는 기본 동작이 적용되고 less를 검색하면 갑자기 대소문자가 구분됩니다.

관련 정보