私はmanページを参照するリソースを構築していますが、manページにアクセスする方法を誰かが知っているかどうか疑問に思っています構造化データ?私の現在のアプローチは、REGEXする場合にlotを実行することですが、これは面倒でエラーが発生しやすくなります。
私は* nixの専門家ではありませんが、manページについて理解しているのは、基本的にはman
コマンドで解析できる特定の構文を持つテキストファイルであるということです。これは、たとえば、オプションやフラグのリストにアクセスする簡単な方法があるのではないかと少し懐疑的になります。しかし、多分私が知らないそれをする方法があります。
fish Shell がどのように manページからの完了 を構築するか、特にどのように__fish_complete_man
動作します。 groff
を想定したより簡単なオプションは、HTMLを発行してから、そこにある多数のHTMLパーサーの1つを使用して必要なものを取得することです。
$ groff -T html -mdoc xpquery.1 | xpquery -p HTML '//p[b="xpquery"][2]' -
<p style="margin-left:17%;"><b>xpquery</b>
[<b>−E </b><i>encoding</i>]
[<b>−n </b><i>namespace</i>]
[<b>−p </b><i>method</i>]
[<b>−S </b><i>xpath-subquery</i>]
[<b>−t </b><i>timeout</i>] <i>xpath-query
file-or-url ..</i></p>
$
これは manページ HTMLとしてレンダリングされ、 XPath を使用して選択され、概要セクションのフラグのリストを取得します。最近では、CSSセレクターの使用がより流行している可能性があります。ただし、生成されたHTMLはあまり構造化されていません。
マニュアルページは roff フォーマットされたテキストファイルです。残念ながら、これは現在、フォーマット言語を解析するのに最も苛立たしいものの1つです。システムが使用するroff実装のドキュメントを調べることで、必要なものを引き出すことができます(ほとんどの場合、nroff
、troff
、またはgroff
のいずれかになります)。フォーマット自体はやや複雑ですが(ミニマリズムが優れたソフトウェア設計の縮図であった時代に設計されました)、ほとんどのマニュアルページの構造はかなり一貫しているので、それほど難しくはありません。
それに加えて、他にもいくつかのオプションがあります。 1つ目は、ソフトウェアのソースディストリビューションにあるマニュアルページのソースを確認することです。最近のほとんどのソフトウェアは、manプログラムによって他の形式から解析されたroffソースにmanページをコンパイルします。そのほとんどはroffマクロよりもはるかに簡単に解析できます。もう1つは、thrigの回答で示唆されているように、manページを他の形式に変換するツール(groff
を含む)を調べることです。
manServer をチェックしてください。これは1999年のPerlスクリプトで、manページを簡単な方法で解析してWebページとして表示します。 troffソースを解釈するために必要なすべてのPerlコードが含まれています。