web-dev-qa-db-ja.com

すべてのマニュアルページから文字列を検索する方法

Bashのマニュアルページに「中括弧拡張」(大文字と小文字を区別しない)という文字列を含むすべての行を表示するコマンドはどれですか?

man -wK . | grep "[Bb]race [Ee]xpansion"を試しました。一連の「改行できませんでした」エラーが発生しました。

次に、 manページ内にハイフンを含むパターンを検索する方法 のクエリを読んだ後、コマンドman -s1 -Kw --regex 'brace expansion'を使用して検索しようとしました。

私は戻りました:

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

catを使用してファイルを印刷しようとしましたが、すべての奇妙な記号が表示されました。

4
beginner 921

コマンドman bashを実行すると、システムのデフォルトのポケットベル(通常はless)でドキュメントを開きます。特定のパターンに一致する行にスキップするには、/<pattern>と入力します。たとえば、マニュアルページを入力した直後に次のように入力します。

/brace expansion

その後、自動的に最初のオカレンスに移動します。そこからnを押すと、後のオカレンスに移動できます。

また、.gzファイル拡張子は、ファイルがgzipを使用して圧縮されることを意味します。このファイルを直接読み取ることはできません。

4
Crypteya

検索の結果(システム上のmanページのソースファイル)をローカルモードでmanに返して、各ページを読み取ることができます。

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

Manコマンド検索に使用される正規表現は、デフォルトでは大文字と小文字を区別しません。検索結果のリストが並べ替えられ、重複があれば削除されます。次に、xargsを使用してmanに返されます。 catページャーを使用すると、処理された各マニュアルページを標準出力に印刷できます。その時点で、データはgrepが操作できるプレーンテキストのストリームです。

man-lオプションは、ローカルモードをアクティブにするために使用されます。ローカルモードでは、システムのMANPATHを解析する代わりに、ファイルを直接解析します。

man-P catオプションは、ポケットベルをcatに設定します。これは、処理されたマニュアルページがcatを使用して表示されることを意味します。

grep-iオプションは、大文字と小文字を区別しない検索に使用されます。 -nオプションは、行番号を出力します(便宜上追加されただけです)。 -Fオプションは、パターンが固定文字列であることを指定します。

1
Haxiel

次のコマンドで元の質問をすると、bashのmanページに「中括弧の展開」を含むすべての行が表示されます。

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

最初に、説明の「bash」に対応するマニュアルページのリストを取得し、その後、取得したリストを繰り返し処理して、一致する「中括弧拡張」文字列を検索します。 zgrep(1)は、ファイルをサイレントに解凍します;)

0
l00p