我试图解析命令的帮助文件,以获取命令例外的所有参数。
下面是帮助文件中的一些文本:
* --digest:
Set the digest for fingerprinting (defaults to the digest used when
signing the cert). Valid values depends on your openssl and openssl ruby
extension version.
* --debug:
Enable full debugging.
* --help:
Print this help message
* --verbose:
Enable verbosity.
* --version:
Print the puppet version number我只想抓住--argument什么都不想。
我几乎可以用这个命令得到它,但它仍然包括":“,我想排除它:
puppet cert --help | egrep '^* --(.*):$' | awk '{print $2}'
--all:
--allow-dns-alt-names:
--digest:
--debug:
--help:
--verbose:
--version:为什么'^* --(.*):$'包括":“,它不应该匹配'^* --'和':$'之间的所有内容吗?
发布于 2015-12-05 00:06:23
它不是应该匹配
^* --和:$之间的所有东西吗?
实际上,不是。你正在捕捉一个组,但它不会只打印这个组。我建议使用-P标志来使用Perl,并查看四周。在你的例子中,这可能就足够了:
$ cert --help | grep -Po '^\* \K--\w+'注意,我还使用了-o选项,只打印匹配的内容,而不是整行。这就消除了awk的使用。
根据你最初的想法和更多的周遭观察,你会发现一条更完整的线条:
$ cert --help | grep -Po '^\* \K--.*(?=:)'编辑:正如mklement0在注释和详细答复中所指出的,这需要grep。但是,您也可以对Perl本身执行同样的操作,Perl很可能已经安装在您的系统中了。
$ cert --help | perl -nle 'print $1 if /^\* (--\w+)/'这就像循环中的一行代码。它由-nle自动生成。-n用于输入外观,-l用于自动换行,-e用于表示代码行。
如果该行与regex匹配,Perl代码行将打印第一个捕获的组。因此,它也结合了你原来的解决方案的想法。
要获得完整的符合POSIX标准的答案,请查看本页中的answer by mklement0。
https://stackoverflow.com/questions/34099480
复制相似问题