繁体   English   中英

使用Linux获取包含特定文本的文件

[英]Get files which contains a specific text using Linux

我想在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 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' {} +

使用find

find '/path/to/somewhere' -maxdepth 1 -type f -exec grep -H 'pattern' {} \;

如果模式必须是正则表达式:

ls -A /path/to/dir | grep -E PATTERN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM