Man

全文搜尋手冊頁並從 apropos(1) 等控制台獲取名稱和描述列表

  • July 25, 2021

有沒有辦法對手冊頁進行全文搜尋並從控制台獲取相關手冊頁的名稱和描述列表apropos(1)

您可以使用man -K. 但是存在三個問題:

  1. man -K不向控制台顯示第一個結果的標題。
  2. man -K僅顯示這樣的聯機幫助頁的標題:

--Man-- next: ansible(1) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ] 3. man -K需要Ctrl-D跳過查看手冊頁的內容。因此,您不能使用yes(1)將響應傳遞給man -K.

可能有一種更簡單的方法,但我發現man -K可以結合使用-w來列印包含搜尋詞的文件的路徑,並且您可以將其結合起來,lexgrog例如提取 whatis 資訊:

$ man -Kws1 apropos | sort -u | xargs -rd '\n' lexgrog | perl -pe's/.*?: "(.*)"/$1/'
apropos - search the manual page names and descriptions
emacs - GNU project Emacs editor
groffer - display groff files and man pages on X and tty
info - read Info documents
lexgrog - parse header information in man pages
man - an interface to the system reference manuals
manpath - determine search path for manual pages
scanimage - scan an image
whatis - display one-line manual page descriptions
xman - Manual page display program for the X Window System

xargs(這裡假設 GNU-r-d選項,儘管後者不太可能是必要的)

您可以將其轉換為full-apropos腳本或函式,例如:

#! /bin/sh -
man -Kw "$@" |
 sort -u |
 xargs -rd '\n' lexgrog |
 perl -pe's/.*?: "(.*)"/$1/'

但是,我們缺少 man 部分資訊。由於那是在文件的路徑中,我們可以將其添加回來,例如:

#! /bin/sh -
man -Kw "$@" |
 sort -u |
 while IFS= read -r file; do
   section=${file%/*}
   section=${section##*/man}
   lexgrog -- "$file" |
     perl -spe's/.*?: "(.*)"/$1/; s/ - / ($s)$&/' -- "-s=$section"
 done

引用自:https://unix.stackexchange.com/questions/659819