【问题标题】:grep -r not available; what now?grep -r 不可用;现在怎么办?
【发布时间】:2015-06-10 14:04:53
【问题描述】:

我正在尝试在当前文件夹中包含的所有文件中递归搜索字符串,我正在执行 grep。但似乎这台主机上的grep 太旧了。以下是它的一些用法。

>> grep -r "some string here" *.*
grep: illegal option -- r
usage: grep [-E|-F] [-c|-l|-q] [-bhinsvwx] -e pattern_list...
        [-f pattern_file...] [file...]
usage: grep [-E|-F] [-c|-l|-q] [-bhinsvwx] [-e pattern_list...]
        -f pattern_file... [file...]
usage: grep [-E|-F] [-c|-l|-q] [-bhinsvwx] pattern [file...]

那我该怎么做?

【问题讨论】:

    标签: shell text command-line grep


    【解决方案1】:

    假设你有find

    find . -type f -exec grep "some string here" {} \;
    

    还要注意,您的通配符只会匹配名称中包含点的文件;我认为这是一个错误,但如果不是,请在-exec 之前添加-name '*.*'(或者如果您要搜索名称包含点的目录,则将find . 更改为find *.*,这就是您的grep 命令实际上会这样做)。

    旧的 DOS 8+3 通配符 *.* 将匹配所有文件,因为即使在没有扩展名的文件名中,点也是隐含的。所有文件(不以点开头)的 Unix 通配符就是 *

    使用xargs 或使用支持-exec ... + 的更新的find 可以提高效率

    【讨论】:

    • @ДеянДобромиров:我想你的意思是:computerhope.com/unix/ugrep.htm(无 ssl)。
    • 如果输出速度过快,将输出传送到less,或者将其重定向到文件。
    • 不是前夕/tmp?然后像已经建议的那样通过管道传输到less,或者从您具有写入权限的主机上通过ssh 运行命令。
    • 多跳 SSH 并没有真正改变情况。 ssh gateway ssh destination find ... >/tmp/file。但同样,到less 的管道不需要任何地方的写访问权限。
    • find . -name '*.Z' | xargs zgrep -n "string to search for" 应该做你想做的事。但是,如果您有不同的问题,请发布一个新问题,而不是将 cmets 中的新要求堆放在这个问题上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    相关资源
    最近更新 更多