我想在手册页中搜索特定选项(例如-s
、-f
)-l
,并仅显示包含这些选项功能信息的结果。我尝试使用此命令,希望单引号能够绕过grep
接收选项:
man --pager=cat some_man_page_here | grep '-option_here'
我也尝试过\
但是grep
给出了语法错误:
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.
我只是想知道是否有办法grep
在手册页中搜索选项。我目前正在使用寻找终端顶部栏上的按钮,但我希望能够提高grep
效率。
答案1
这对你的情况有用吗?
$ man ls | grep -- '--a'
-a, --all
-A, --almost-all
--author
该命令的更详细(希望更清晰)示例:
$ man shutdown | grep -- '-'
shutdown - Halt, power-off or reboot the machine
shutdown may be used to halt, power-off or reboot the machine.
logged-in users before going down.
--help
-H, --halt
-P, --poweroff
Power-off the machine (the default).
-r, --reboot
-h
Equivalent to --poweroff, unless --halt is specified.
-k
Do not halt, power-off, reboot, just write wall message.
--no-wall
Do not send wall message before halt, power-off, reboot.
-c
On success, 0 is returned, a non-zero failure code otherwise.
编辑:
作为glenn jackman 在下面评论(很有用):
将结果缩小到仅以连字符开头的行:
grep '^[[:space:]]*-' –
测试运行:
$ man shutdown | grep -- '-' | grep '^[[:space:]]*-'
--help
-H, --halt
-P, --poweroff
-r, --reboot
-h
-k
显然也可以使用顺便提一下在 Linux 中。
[+] 外部链接:
答案2
使用一个简单的函数来直接从它们的手册页返回与命令开关相关的特定部分及其后面的简短描述:
sman() {
man "${1}" \
| grep -iozP -- "(?s)\n+\s+\K\Q${2}\E.*?\n*(?=\n+\s+-)"
}
叫它sman <command-name> <switch>
喜欢:sman ls -A
-a, --all
do not ignore entries starting with .
-A, --almost-all
do not list implied . and ..
解释(来自https://regex101.com/):
-i
— 启用不区分大小写的匹配-o
— 仅返回匹配的部分-z
— 将输入和输出数据视为行序列,每行以零字节(ASCII NUL 字符)而不是换行符终止。-P
— 启用 PCRE
(?s)
将模式的其余部分与以下有效标志进行匹配:s
s 修饰符— 单行。点匹配换行符\n+
匹配换行符(换行符)
+ 量词— 匹配一和无限次,尽可能多的次,根据需要回馈(贪婪的)\s+
匹配任何空白字符\K
重置报告的比赛的起点。任何之前消耗的字符不再包含在最终比赛中\Q${2}\E
引用文字 — 匹配扩展的2美元字面上的字符.*?
匹配任意字符
*? 量词— 匹配零和无限次,尽可能少的次数,根据需要扩展(懒惰的)\n*
匹配换行符(换行符)
* 量词— 匹配零和无限次,尽可能多的次,根据需要回馈(贪婪的)(?=\n+\s+-)
正向前瞻:断言下面的正则表达式匹配:
\n+
匹配换行符(新行符)。
\s+
匹配任何空格字符并按字面意思
-
匹配该字符-
。