【问题标题】:Fuzzy search Shell command?模糊搜索Shell命令?
【发布时间】:2015-05-17 01:15:24
【问题描述】:

以下情况: 我在使用终端(bash)的不同mac(没有命令历史记录)上只记住命令的一部分,例如搜索带有 util 的命令。不记得是mdutil

如何在终端中完全高效地模糊搜索命令,而不创建新文件?


我现在的典型做法:

要找到该命令,我可以用谷歌搜索,但效率不高,需要互联网连接和浏览器。

Tab Tab,查看所有命令并滚动浏览它们,直到我认出正确的命令。

或将所有命令输出到文本文件并在其中搜索。

【问题讨论】:

    标签: bash terminal osx-yosemite


    【解决方案1】:
    compgen -ca | grep util
    

    做得最好。您可以搜索命令的任何部分,而不是 util

    就像 gniourf_gniourf 所说,更好的解决方案是

    compgen -caX '!*util*'
    

    【讨论】:

    • 这有点难看...为什么不用compgen -caX '!*util' 来代替?
    • 因为您只是显示以util 结尾的命令,并不模糊。
    • 叹息。这有点难看……为什么不改用compgen -caX '!*util*'
    【解决方案2】:

    如何从man -k 开始并精炼,如下所示:

    man -k util | grep -i meta
    Moose::Util::MetaRole(3pm) - Apply roles to any metaclass, as well as the object base class
    mdutil(1)                - manage the metadata stores used by Spotlight
    

    【讨论】:

    • 差不多。 man -kapropos 相同。但它也向我展示了util 也在whatis 描述中的行。它应该只显示 util 在减号之前的行。
    • 是的,用正则表达式做到了:apropos util | grep "util[^-\n]* - "
    • @ViktorLexington apropos -s1apropos -s8(用于系统管理工具)消除了许多不需要的联机帮助页。 (可以和-s1,8结合使用)
    【解决方案3】:

    我猜你可以这样做:

    oldIFS="$IFS"
    IFS=:
    for dir in $PATH; do
        ls $dir/*util* 2> /dev/null
    done
    IFS="$oldIFS"
    

    这将遍历$PATH 中的所有目录,寻找包含util 的命令。

    【讨论】:

      猜你喜欢
      • 2016-11-01
      • 2020-03-15
      • 2014-08-20
      • 2011-10-28
      • 2016-06-12
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多