【问题标题】:grep -l 'string' path prints the path followed by 'is a directory'grep -l 'string' path 打印路径后跟 'is a directory'
【发布时间】:2015-04-23 13:56:53
【问题描述】:

我不知道我做错了什么。我试图让 grep 返回目录中文件中的字符串匹配项,但它只是返回后跟“是目录”的路径。我查看了手册页并执行了 grep --help,但我不明白语法。

【问题讨论】:

    标签: bash unix grep


    【解决方案1】:

    您需要-r 进行递归。

    下面会搜索some_directory寻找包含something的文件:

    grep -l -r something some_directory
    

    如果您不指定-rgrep 会认为您正在尝试搜索目录本身并且它会适当地响应:

    grep: some_directory: Is a directory
    

    使用-rgrep 了解您要在以some_directory 开头的目录树中查找文件。

    检索不带路径的文件名

    要从文件名中删除路径,例如,我们可以使用basename

    grep --null -l -r something some_directory | xargs -0 -n1 basename
    

    如果您只想删除 some_directory 而保留所有子目录,请使用:

    ( cd some_directory; grep -l -r something . )
    

    【讨论】:

    • 谢谢,这行得通!此外,如何让它只打印文件名而不是整个路径?
    • @Egbert grep 不会单独执行此操作,但我们可以使用 basename 执行此操作。查看更新的答案。
    猜你喜欢
    • 2022-11-14
    • 2021-12-22
    • 2020-08-30
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多