什么是最简单的方法来轻击“男人”。标志

时间:2017-02-27 14:54:17

标签: unix grep flags man

我确实使用grep,但我希望能有所改善。

关于这个问题。我想缩小man条目以找到-vgrep -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

做好工作。

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

1 个答案:

答案 0 :(得分:0)

一种方法是直接解析命令的Info文档。如果您运行info grep(或其他命令),您将经常会找到更详细,结构更好的文档,这样您就可以直接指出所需的部分。

这是一个打印出选项/变量/ etc的相关Info部分的函数:

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

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

$ info_search grep -v
‘-v’
‘--invert-match’
     Invert the sense of matching, to select non-matching lines.  (‘-v’
     is specified by POSIX.)
$ info_search gawk RS
'RS == "\n"'
     Records are separated by the newline character ('\n').  In effect,
     every line in the data file is a separate record, including blank
...
$ info_search bash -i
`-i'
     Force the shell to run interactively.  Interactive shells are
...