모든 매뉴얼 페이지에서 문자열을 검색하는 방법

모든 매뉴얼 페이지에서 문자열을 검색하는 방법

"중괄호 확장"(대소문자 무시) 문자열이 포함된 Bash 매뉴얼 페이지의 모든 행을 표시하는 명령은 무엇입니까?

man -wK . | grep "[Bb]race [Ee]xpansion"일련의 "연결을 끊을 수 없습니다" 오류가 발생하려고 했습니다 .

man -s1 -Kw --regex 'brace expansion'그런 다음 쿼리를 읽은 후 명령을 사용하여 검색을 시도했습니다.하이픈이 포함된 패턴을 매뉴얼 페이지에서 검색하는 방법은 무엇입니까?

나는 돌아왔다:

/usr/share/man/man1/bash.1.gz 

인쇄 파일을 사용해 보았 cat더니 이상한 기호가 모두 표시되었습니다.

답변1

이 명령을 실행하면 man bash일반적으로 시스템의 기본 호출기에서 문서가 열립니다. less특정 패턴과 일치하는 줄로 이동하려면 를 입력하면 됩니다 /<pattern>. 예를 들어 매뉴얼 페이지에 들어간 직후 다음을 입력합니다.

/brace expansion

그러면 나타나는 첫 번째 위치로 자동으로 이동해야 합니다. 거기에서 버튼을 눌러 n이후 이벤트로 이동할 수 있습니다.

파일 확장자는 또한 .gz파일이 gzip을 사용하여 압축되었음을 의미합니다. 파일을 직접 읽을 수는 없습니다.

답변2

검색 결과(시스템의 매뉴얼 페이지 소스 파일)는 각 페이지를 읽기 위해 로컬 모드에서 man에게 다시 전달될 수 있습니다.

man -wK --regex 'Brace Expansion' | sort -u | xargs man -l -P cat | grep -inF 'Brace Expansion'

기본적으로 man 명령 검색에 사용되는 정규식은 대소문자를 구분하지 않습니다. 검색 결과 목록이 정렬되고 모든 중복 항목이 제거됩니다. 그런 다음 man 에게 다시 전달된 값을 사용합니다 xargs. cat호출기를 사용하면 처리된 각 매뉴얼 페이지를 표준 출력으로 인쇄할 수 있습니다. 이 시점에서 데이터는 grep이 작동할 수 있는 일반 텍스트 스트림입니다.

옵션은 시스템의 MANPATH 를 구문 분석하는 대신 파일을 직접 구문 분석하여 로컬 모드를 활성화하는 데 사용됩니다 -l.man

호출기를 로 설정하는 -P cat옵션 입니다 . 이는 처리된 매뉴얼 페이지가 를 사용하여 표시된다는 의미입니다 .mancatcat

대소문자를 구분하지 않는 검색 옵션입니다 -i. grep-n옵션은 줄 번호를 인쇄합니다(편의를 위해 추가되었습니다). 이 -F옵션은 패턴이 고정 문자열임을 지정합니다.

답변3

원래 질문에 따라 다음 명령은 "중괄호 확장"이 포함된 bash 매뉴얼 페이지의 모든 줄을 표시합니다.

for page in $( man -k bash | awk '{print $1}' ); do
    zgrep -i -n  'brace expansion' $(man -w $page) /dev/null
done

먼저 설명에서 "bash"에 해당하는 매뉴얼 페이지 목록을 얻은 다음 검색된 목록을 반복하고 일치하는 "중괄호 확장" 문자열을 검색합니다. zgrep(1)은 자동으로 파일의 압축을 풀어줍니다 ;)

관련 정보