macOSでmanページをgrepしようとすると、奇妙な動作になります。たとえば、Bashのマニュアルページには次の文字列が明確に記載されていますNAME
。
$ man bash | head -5 | tail -1
NAME
そして、私がgrepしname
た場合、結果が得られますが、私がgrepした場合、結果は得られNAME
ません:
$ man bash | grep 'NAME'
$ man bash | grep NAME
私はそこにあることがわかっている他の大文字の単語を試しましたが、SHELL
yields を検索すると何も得られませんが、BASH
yieldsを検索すると結果が得られます。
何が起きてる?
更新:すべての回答をありがとう!これに遭遇したコンテキストを追加する価値があると思いました。ラップするbash関数を作成したかったのでman
、シェルビルトインのマニュアルページを検索しようとした場合は、Bashのマニュアルページの関連セクションにジャンプしてください。より良い方法があるかもしれませんが、ここに私が現在持っているものがあります:
man () {
case "$(type -t "$1")" in
builtin)
local pattern="^ *$1"
if bashdoc_match "$pattern \+[-[]"; then
command man bash | less --pattern="$pattern +[-[]"
elif bashdoc_match "$pattern\b"; then
command man bash | less --pattern="$pattern[[:>:]]"
else
command man bash
fi
;;
keyword)
command man bash | less --hilite-search --pattern='^SHELL GRAMMAR$'
;;
*)
command man "$@"
;;
esac
}
bashdoc_match() {
command man bash | col -b | grep -l "$1" > /dev/null
}
man bash | grep NAME
期待どおりに動作します。
help
コマンドを検出した場合は、bash コマンドを使用してその情報を取得できます。
help
結果があまりにも多く残されていることが多いことです。たとえば、チェックアウトhelp complete
とcomplete
セクションのセクションをご覧くださいman bash
。