我想在Linux中的特定目录中查找文件,而无需查看其子目录,该子目录的文本中包含特定字符串。从这个答案中,我在删除了r
递归后尝试了以下方法:
grep -nw '/path/to/somewhere/' -e "pattern"
但它不起作用。我也尝试通过跳过目录optin来尝试此操作:
grep -rnw -d skip '/path/to/somewhere/' -e "pattern"
我试图排除与当前目录不同的任何目录,但也没有办法:
grep -rnw -exclude-dir '[^.]' '../../path/to/somewhere/' -e "pattern"
可能是这个问题令人困惑,我希望现在弄清楚,专利应该匹配内容而不是文件名!
您的问题不清楚,在原始答案中,我显示了如何查找与模式匹配的文件名。如果您只想搜索内容与模式匹配的文件,则只需
grep 'pattern' directory/*
(使用外壳程序)。
您仍然可以使用find
过滤掉文件,然后再传递给grep
:
find 'directory' -maxdepth 1 -mindepth 1 -type f \
-exec grep --with-filename 'pattern' {} +
Grep不是搜索文件名的合适工具,因为您需要在传递给Grep之前生成文件列表。即使使用一样的命令获得了预期的结果ls | grep pattern
,您也必须追加另一个管道才能处理文件(我想,您很可能迟早需要以某种方式处理它们)。
请find
改用,因为它具有自己强大的模式匹配功能。
例子:
find 'directory' -maxdepth 1 -mindepth 1 -regex '.*pattern'
用途-iregex
为不区分大小写版本-regex
。而且阅读-name
,-iname
,-path
,和-ipath
选项。
可以为要通过-exec
操作处理的文件运行命令(或脚本),例如:
find 'directory' -maxdepth 1 -mindepth 1 -type f \
-regex '.*pattern' -exec sed -i.bak -r 's/\btwo\b/2/g' {} +
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句