在“man grep”中查找标志的最简单方法是什么

问题描述 投票:0回答:2

我确实经常使用 grep,但我很想改进一下。

关于问题。我想缩小

man
的条目范围,找到
-v
中的
grep -v 'pattern' filename
代表什么的解释,主要是这样的:

 -v, --invert-match
         Selected lines are those not matching any of the specified patterns.

因此,要找到包含

-v
的行之后的下五行,我尝试了:

man grep | grep -A 5 -v

man grep | grep -A 5 '-v'

但他们回来了:

usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
    [-e pattern] [-f file] [--binary-files=value] [--color=when]
    [--context[=num]] [--directories=action] [--label] [--line-buffered]
    [--null] [pattern] [file ...]

这让我很困惑:

man grep | grep -A 5 'Selected'

man grep | grep -A 5 Selected

做事。

我的方法有什么问题吗?有没有更简单的方法来实现我的需要?

unix grep flags manpage
2个回答
1
投票

一种方法是直接解析命令的

Info
文档。 如果您运行
info grep
(或其他命令),您通常会发现更详细、结构更好的文档,这将让您精确定位您需要的部分。

这是一个函数,它将打印出选项/变量/等相关的

Info
部分:

info_search() {
   info --subnodes "$1" -o -  2>&- \
   | awk -v RS='' "/(^|\n)(‘|'|\`)$2((,|\[| ).*)?(’|')\n/"
}

这应该适用于 Linux/macOS/BSD。 输出如下:

$ info_search grep -v
‘-v’
‘--反转匹配’
     反转匹配的意义,以选择不匹配的行。  (‘-v’
     由 POSIX 指定。)
$ info_search gawk RS
'RS=='
”'
     记录由换行符 ('
')。  有效,
     数据文件中的每一行都是一个单独的记录,包括空白
...
$ info_search bash -i
`-i'
     强制 shell 以交互方式运行。  交互式 shell 是
...

0
投票

只是发布 grail 的评论作为答案,因为它很有用。

--
将非参数与参数分开:

man grep | grep -A 5 -- -v
© www.soinside.com 2019 - 2024. All rights reserved.