【问题标题】:Finding the distinct directory names using grep or rg使用 grep 或 rg 查找不同的目录名称
【发布时间】:2021-04-13 15:41:54
【问题描述】:

我是 Linux 命令的新手,我正在尝试在目录和包含该单词的所有目录名称中递归搜索“apple”的单词。

我正在使用类似于 grep 的 ripgrep(rg) 来获取其中包含苹果的文件名

例如:

rg -l "apple" 

给我输出:

a/fruit.c
b/fruit.c
a/fruits.c
a/fruitsnames.c
a/fruity/fruits.c
b/fru/fruit/fru/fr.c
c/frts.c

有没有办法让我只能使用唯一的父文件夹名称?

Example output I expect is to get only the folder names:
a
b
c

使用 grep 的解决方案也不错。

非常感谢

【问题讨论】:

    标签: python grep ripgrep


    【解决方案1】:

    使用sed 删除/ 中的所有内容,然后使用sort -u 删除重复项

    ripgrep -l apple | sed 's#/.*##' | sort -u
    

    【讨论】:

    • 感谢您的快速回复。我会试一试 :) 有没有一种有效的方法来做到这一点,比如如果你在目录中的文件中找到一个“苹果”,那么我们可以跳过检查该目录中的所有剩余文件,因为我们只想得到目录名称?我认为它会使其更快
    • 只有通过某种方式告诉ripgrep 在找到匹配项后停止搜索文件。
    • 那么你可以使用for dir in */; do ripgrep <option to stop at first match> -l apple "$dir"; done
    • 我在 ripgrep 手册中找不到完整的标志列表。它只有Common Options
    • 是的,我也搜索过,但找不到。也许我们可以做到 grep 我会看到的。非常感谢:)
    【解决方案2】:

    使用 Perl 单行代码和 sort -u,因此保持唯一目录:

    rg -l "apple" | perl -pe 's{/[^/]+$}{}' | sort -u
    

    或只保留最高级别的目录:

    rg -l "apple" | perl -pe 's{/.*}{}' | sort -u
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 2015-04-10
      相关资源
      最近更新 更多