web-dev-qa-db-ja.com

grepを使用して--help出力を検索する方法

grepまたはegrepを使用して--helpパラメータを指定したプログラムからの出力を検索すると、一致する行の代わりに完全な出力が出力されます。

例:

ssh-keygen --help | grep "known_hosts"
unknown option -- -
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]
                  [-N new_passphrase] [-C comment] [-f output_keyfile]
       ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
       ssh-keygen -i [-m key_format] [-f input_keyfile]
       ssh-keygen -e [-m key_format] [-f input_keyfile]
       ssh-keygen -y [-f input_keyfile]
       // etc

ssh-keygen --help | grep "-p"などのパラメータを検索すると、grepはこのパラメータをそれ自体で認識します。ダッシュ(grep "\-p")をエスケープしても効果がありません。

例:

ssh-keygen --help | grep "-p"         
grep: invalid option -- 'p'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
unknown option -- -
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]
                  [-N new_passphrase] [-C comment] [-f output_keyfile]
       ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
       ssh-keygen -i [-m key_format] [-f input_keyfile]
       ssh-keygen -e [-m key_format] [-f input_keyfile]
       ssh-keygen -y [-f input_keyfile]
       ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
       ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile]
       ssh-keygen -B [-f input_keyfile]

これを解決するには?助けてくれてありがとう!

7
rapstacke

ssh-keygenコマンドには--helpオプションがないため、「不明なオプション」エラーを出力し、「RTFM」と表示せずにヘルプを出力します。これはstdoutではなくstderrで行われます。これは|でパイプされず、|&(これはbash2>&1 |の省略形):

$ ssh-keygen --help |& grep "known_hosts"
       ssh-keygen -F hostname [-f known_hosts_file] [-l]
       ssh-keygen -H [-f known_hosts_file]
       ssh-keygen -R hostname [-f known_hosts_file]

まったく異なる問題は、ハイフンで始まるため、grepが検索式をオプションとして認識することです。幸い、grepは、「オプションの終わり」の--オプションを認識し、その後ろにあるすべてのものをオプションではなく引数として受け取る多くのコマンドの1つです。

$ ssh-keygen --help |& grep -- -p
       ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

man grepには触れられていませんが、bashマニュアルのこのオプションの説明は次のとおりです:

--はオプションの終わりを示し、それ以降のオプション処理を無効にします。 --の後の引数は、ファイル名と引数として扱われます。

grepは、「-」で始まるパターンを処理する2番目の方法も提供します。-eオプションは、引数としてパターンを使用するため、次のことも可能です。

$ ssh-keygen --help |& grep -e -p
       ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

参考文献

15
dessert

探しているものがssh-keygenコマンドのヘルプである場合

man ssh-keygen | grep known_hosts

または、man ssh-keygenコマンドラインから、次に / そして、「kno」などの検索用語を入力し、 Enter、 使用する n 検索語の次のインスタンス(man manman)の使用に関する詳細情報。 man検索は下方向にしか検索しないことに注意してください。したがって、 PgUp または Home 新しい検索を開始する前に、手動エントリの先頭に戻ります。

2
Stephen Boston

存在しないオプションを指定してssh-keygenを呼び出します。これはエラーであり、エラー出力はstderrに表示されます。 ssh-keygenがその使用法を出力するための通常のオプションを持っているように見えません:ある場合(GNUプログラムが--helpをデフォルトで持つなど)、その「通常」出力はstdoutに表示され、使用したパイプのlessにアクセスできます。

ssh-keygen --help 2>&1 | grep -e "-p"を使用すると、この問題を回避できます。2>&1はstderrをstdoutにリダイレクトし、パイプがそれをキャッチできるようにします。grepのオプションとしての-eは、「次は正規表現を使用してオプションのように見える場合」.

man ssh-keygenは、使用量を取得するために適切に機能し、デフォルトでlessにパイプして、/を使用して正規表現を検索できます。通常、コンテキストでの読み取りがより良い選択です。

2
user984048