首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >grep -ril,只显示顶部目录一次。

grep -ril,只显示顶部目录一次。
EN

Unix & Linux用户
提问于 2020-12-02 12:24:04
回答 2查看 1.6K关注 0票数 2

所以我想在文件夹中做grep -ril。我希望它只返回顶部的文件夹,得到一个匹配。

为了说明:

/tmp/: grep -ril "hello"

返回:

代码语言:javascript
复制
tmp1/banan/file
tmp1/banan2/file
tmp2/ape/file
tmp2/ape2/file

预期结果:

代码语言:javascript
复制
tmp1
tmp2
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2020-12-02 12:28:00

目录与内容的模式不匹配;文件匹配。您似乎要问的是如何获取与模式匹配的文件目录。

去掉通过第一个组件的路径,并确保结果按排序顺序显示为唯一值,如您所指定的那样。

代码语言:javascript
复制
grep -ril "hello" | sed 's!/.*$!!' | sort -u

如果不想更改结果的顺序,则将sort替换为awk '!h[$0]++'

票数 5
EN

Unix & Linux用户

发布于 2020-12-02 12:59:01

如果您只想打印第一级目录,则在此目录下找到第一个匹配目录后立即退出将更有效。您可以使用-q来实现这一点,它返回匹配成功,否则失败,如果与-r组合,则在找到匹配时立即退出。

代码语言:javascript
复制
for d in */; do grep -qri "hello" -- "$d" && printf "%s\n" "$d"; done

--用于指示选项的结尾,所以接下来的都是文件参数,这保护了任何名为-something的目录,并且可以解释为选项。

如果您希望上面的for匹配以.开头的目录,请考虑设置shopt -s dotglob,请参见

如果需要从输出中移除尾随的/,可以使用bash参数展开,而不是"$d",打印"${d%/}"

票数 6
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/622534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档