如何使用grep查找–help输出并查看以破折号开头的CLI参数如何执行

您是否曾见过一个带有一长串神秘的单字母参数的命令,这些参数以破折号/连字符开头,并且需要一种快速的方法来找出每个命令行参数的作用?本文介绍了如何执行此操作。

使用 grep 搜索 --help 这样的输出将失败:

$ rm --help | grep -r

Usage: grep [OPTION]... PATTERNS [FILE]...

Try 'grep --help' for more information.

那是 grep 盛宴 -r 不是作为搜索模式,而是作为其自身的参数。那么正确的用法是什么 grep 搜索 --help 以破折号开头的参数输出?

让我们从一个简单的示例开始,该示例只有一个以破折号/连字符开头的命令行参数。你想知道什么 -r 自变量的意思是 rm -r 命令。搜索 rm --help 使用 grep 如下:

rm --help | grep -w -- -r

这将输出:

  -r, -R, --recursive   remove directories and their contents recursively
By default, rm does not remove directories.  Use the --recursive (-r or -R)

-- 在这里非常重要。双破折号(--)表示该特定命令的选项结尾(命令行标志结尾)。之后,仅接受位置参数。这里是, grep 它不会尝试将双破折号后面的内容解释为选项/标志。

grep -w 该参数仅用于匹配整个单词,因此,例如,它仅匹配。 -r,不是 -rSOMETHING..

可以代替双破折号使用的替代方法 -e..例如 grep -w -e -r (或者 grep -we -r)和相同的结果 grep -w -- -r 在上面的例子中。 -e 您可以指定搜索模式,并将其用于保护以破折号(-)。实现此目的的另一种方法是使用转义符的转义 \ (例如 \-r),使用 "-r",这样的。

这也适用于以两个破折号开头的命令行参数,但是在示例中我没有使用这些参数,因为它们通常很简单(例如: --help)。

您可能还会喜欢:Tara:Bash和Zsh命令行自动完成守护程序来检测–help用法

在程序中搜索多个单字母命令行参数的作用。 --help

在第二个例子中 grep 搜索 rm --help 为了什么 -r-f 选项是一次性完成的:

rm --help | grep -w -- '-[rf]'

它具有以下输出:

  -f, --force           ignore nonexistent files and arguments, never prompt
  -r, -R, --recursive   remove directories and their contents recursively
  By default, rm does not remove directories.  Use the --recursive (-r or -R)

-[rf] 用于查找两者的正则表达式 -r-f 争论。您可以在之间添加任意数量的命令行参数 [],2不是唯一的一个。

为了使它更易于使用,您可以添加以下我创建的简单函数 ~/.bashrc 或者 ~/.zsh

function argshelp() {   ARGS="${@:2}"  $1 --help | grep -w -- "^  -[$ARGS]"}

并使用(例如,在获取文件后 source ~/.bashrc要查找有关显示其参数说明的命令的帮助,请执行以下操作:

argshelp COMMAND ARGUMENTS

例子:

argshelp rm rf

或者:

argshelp ls l a

如您所见,使用此功能时,命令参数不应以破折号开头。参数可以用空格分隔或一起指定。您也可以将此函数重命名为任意名称(确保命令,别名等中尚未使用该函数)。

您可能还会喜欢:如何使用“查找”查找最近N天或几分钟内已更改的文件

额外的

在某些情况下, -w (仅匹配整个单词) grep 参数,您仍然可能会得到不需要的匹配。例如,您可能只想要 -l 解释自 ls --help, 还是 ls --help | grep -w -- -l 输出:

      --author               with -l, print the author of each file
      --block-size=SIZE      with -l, scale sizes by SIZE when printing them;
                               with -l: show ctime and sort by name;
      --format=WORD          across -x, commas -m, horizontal -x, long -l,
                               single-column -1, verbose -l, vertical -C
      --full-time            like -l --time-style=full-iso
  -g                         like -l, but do not list owner
  -h, --human-readable       with -l and -s, print sizes like 1K 234M 2G etc.
  -l                         use a long listing format
  -n, --numeric-uid-gid      like -l, but list numeric user and group IDs
  -o                         like -l, but do not list group information
                             with -l, WORD determines which time to show;
      --time-style=TIME_STYLE  time/date format with -l; see TIME_STYLE below
                               with -l: show access time and sort by name;

几乎因为 --help 该页面具有以两个空格开头的参数,您可以使用此信息仅捕获以该特定命令行参数开头的行,并排除其他匹配项(相同的示例)。 ls 命令):

  • 查找单个命令行参数(-l):

ls --help | grep -w -- '^  -l'

哪个输出:

  -l                         use a long listing format
  • 搜索多个命令行参数(-l-a):
ls --help | grep -w -- '^  -[la]'

它具有以下输出:

  -a, --all                  do not ignore entries starting with .  -l                         use a long listing format

^ 表示将仅整理从下一行开始的行 ^ 符号;在这里, ^ 其后是两个空格。

您可以使用命令行工具来解释参数对多行代码的作用。在这种情况下,您可以说 grep 要使用以下方式在匹配的行下面列出多余的行: -A (从 grep 帮助: -A NUM “为最后的上下文打印NUM行”。例如 cp 命令帮助 -f 要运行该选项并在两行结尾处显示上下文,请使用:

cp --help | grep -w -A2 -- -f

我有这个输出:

  -f, --force                  if an existing destination file cannot be                               opened, remove it and try again (this option                               is ignored when the -n option is also used)

我也要提一下 Explainshell.com 这是一个网站,您可以在其中写下显示与每个参数匹配的帮助文本的命令。

您可能还会喜欢:如何在Linux上每隔X秒重复一次命令

通过 @nixcraft

Sidebar