我确实经常使用 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
做事。
我的方法有什么问题吗?有没有更简单的方法来实现我的需要?
一种方法是直接解析命令的
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 是 ...