GNU/Linux >> Linux の 問題 >  >> Linux

man ページでフラグを探す方法はありますか?

rici の役立つ回答は、元のアプローチの問題をよく説明しています。

ただし、言及する価値のあることがもう 1 つあります。

man の出力に 書式制御文字 が含まれています 、テキスト検索を妨げます .

col -b にパイプする場合 検索する前に 、これらの制御文字は削除されます - 検索結果もプレーンテキストになるという副作用に注意してください。

ただし、grep この仕事に適したツールではありません。 awk を使用することをお勧めします -O の記述を取得するには、次のようにします。 :

man gcc | col -b | awk -v RS= '/^\s+-O\n/'
  • RS= (空の入力レコード区切り文字) は、入力を空でない行のブロックに分割する awk のイディオムです。そのため、そのようなブロックの先頭にあるオプションを一致させることで、オプションの説明を構成するすべての行 返されます。

POSIX 機能のみの awk がある場合 BSD/OSX awk など 、このバージョンを使用してください:

man gcc | col -b | awk -v RS= '/^[[:blank:]]+-O\n/'

明らかに、このようなコマンドは入力するのがやや面倒なので、generic bash を見つけてください。 関数 manopt 指定されたコマンドの指定されたオプションの説明を man から返します。 ページ . (誤検知と誤検知が発生する可能性がありますが、全体的にはうまく機能しています。)

例:

manopt gcc O          # search `man gcc` for description of `-O`
manopt grep regexp    # search `man grep` for description of `--regexp`
manopt find '-exec.*' # search `man find` for all actions _starting with_ '-exec'

bash 関数 manopt() - ~/.bashrc に配置 、例:

# SYNOPSIS
#   manopt command opt
#
# DESCRIPTION
#   Returns the portion of COMMAND's man page describing option OPT.
#   Note: Result is plain text - formatting is lost.
#
#   OPT may be a short option (e.g., -F) or long option (e.g., --fixed-strings);
#   specifying the preceding '-' or '--' is OPTIONAL - UNLESS with long option
#   names preceded only by *1* '-', such as the actions for the `find` command.
#
#   Matching is exact by default; to turn on prefix matching for long options,
#   quote the prefix and append '.*', e.g.: `manopt find '-exec.*'` finds
#   both '-exec' and 'execdir'.
#
# EXAMPLES
#   manopt ls l           # same as: manopt ls -l
#   manopt sort reverse   # same as: manopt sort --reverse
#   manopt find -print    # MUST prefix with '-' here.
#   manopt find '-exec.*' # find options *starting* with '-exec'
manopt() {
  local cmd=$1 opt=$2
  [[ $opt == -* ]] || { (( ${#opt} == 1 )) && opt="-$opt" || opt="--$opt"; }
  man "$cmd" | col -b | awk -v opt="$opt" -v RS= '$0 ~ "(^|,)[[:blank:]]+" opt "([[:punct:][:space:]]|$)"'
}

fish manopt() の実装 :

Ivan Aracki による寄稿。

function manopt 
  set -l cmd $argv[1]
  set -l opt $argv[2] 
  if not echo $opt | grep '^-' >/dev/null
    if [ (string length $opt) = 1 ] 
      set opt "-$opt"
    else
      set opt "--$opt"
    end
  end
  man "$cmd" | col -b | awk -v opt="$opt" -v RS= '$0 ~ "(^|,)[[:blank:]]+" opt "([[:punct:][:space:]]|$)"'
end

grep $'-O\n' を実際に使用していないのではないかと思います 、むしろ grep によって認識される何らかのフラグ .

grep の観点からは、引数を渡すだけで、その引数は - で始まります したがって、オプションとして解釈されます。 grep -- -O$ のようなことをする必要があります オプションのリストの最後に明示的にフラグを立てる、または grep -e -O$ パターンをパターンとして明示的にフラグ付けします。いずれにしても、grep パターンは実際には改行文字で区切られたパターンのリストであるため、パターンに改行を含めることはできません。したがって、引数 $'foo\n' foo の 2 つのパターンがあります。 と空の文字列、および空の文字列はすべての行に一致します。

おそらく、フラグ -e を検索しました これは引数としてパターンを取り、引数として改行を与えると、grep がファイル全体のすべての行を検索するようになるためです。

gcc などのほとんどの GNU プログラムでは、info が見つかる場合があります。 参照リンク、目次、さらには索引が含まれているため、ナビゲートしやすいインターフェイスです。 info gcc ドキュメントにはオプションのインデックスが含まれており、非常に便利です。一部の Linux ディストリビューションでは、GNU/Linux ディストリビューションと自称しているため、驚くべきことに、info を個別にインストールする必要があります。 man でもパッケージ ファイルはベース ソフトウェアと共に配布されます。 gcc info を含む debian/ubuntu パッケージ ファイルは gcc-doc と呼ばれます 、 例えば。 (-doc の使用 パッケージ名に接尾辞を付けるのは非常に一般的です。)

gccの場合 次のようなコマンドを使用して、オプションをすばやく見つけることができます:

info gcc "option index" O

または

info gcc --index-search=funroll-loops

オプションが少ないプログラムの場合、通常は info の -O を使用するだけで十分です。 オプション:

info -O gawk

Linux
  1. 典型的な使用シナリオのためにマンページを検索する方法は?

  2. 不良ブロックを再起動する方法はありますか?

  3. `sizeof` C 関数のマニュアル ページはどこにありますか?

  1. cd - cp または mv に相当するものはありますか?

  2. Linux で細かいことごとに「sudo」を書かなくて済むようにする方法はありますか?

  3. プロセスを聞く方法はありますか?

  1. 非ルート プロセスを Linux の特権ポートにバインドする方法はありますか?

  2. 列ごとに「ユニーク」にする方法はありますか?

  3. man ページを開き、1 つのコマンドで文字列を検索する