首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Grep和Regex生成文本文件,其中列出了其中包含特定字符串的所有文件。

使用Grep和Regex生成文本文件,其中列出了其中包含特定字符串的所有文件。
EN

Stack Overflow用户
提问于 2017-11-17 20:31:08
回答 2查看 1K关注 0票数 2

我很难为Grep和Regex找出一个非常具体的用例。我找了很多遍,似乎找不到答案。

我希望在根目录中递归地运行Grep,其中包含数百个不同程序的目录。我希望输出打印到一个文本文件,并列出所有文件的名称,这些文件与某些regex匹配。具体来说,以下是我需要用英语做的事情:

查找包含文本stringA和"stringB“或'stringB‘的所有文件,并将每个文件的文件路径打印到添加了上下文的输出文本文件中。对于这两个stringB部分,引号很重要,我只想找到带有单引号或双引号的stringB文件。换句话说,

包含没有引号的stringA和单引号或双引号的stringB的所有文件。

任何帮助都是感激的,谢谢!

编辑:很抱歉问了一个糟糕的问题:)

我做了一些研究,并找出了其中的一部分。我已经找出了寻找我正在寻找的字符串的准则。实际的字符串是"ATA“。要查找全局的、不区分大小写的引用,并且在字符串的两边都有部分或无空格的引号,我们可以使用:

代码语言:javascript
复制
/['"]\s*ATA\s*['"]/gi

我还需要找到的第一个字符串是一个函数调用:调用wflnkmod(其中的正则表达式是:

代码语言:javascript
复制
/call\swflnkmod\(/gi

现在,我只需要弄清楚如何搜索一个文件,并确保其中每个文件都有一个实例,然后找出grep命令来递归搜索所有文件,并将它们打印到输出文件中!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-17 21:14:09

解决方案

应该做到这一点(需要用要搜索的目录替换<dir>):

代码语言:javascript
复制
grep -r -i -l "stringA" <dir> | xargs grep -i -l -E "'stringB'|\"stringB\""

解释

上面的行首先搜索stringA。生成的文件列表被管道传输到xargs中,指定的命令(grep -i -l -E "'stringB'|\"stringB\"")将使用stdin提供的附加参数(包含stringA的文件列表)调用。

grep选项:

  • -r, --recursive (自我解释)
  • -i, --ignore-case搜索不区分大小写
  • -l, --files-with-matches只打印与给定模式匹配的文件的文件名
  • -E将模式解释为扩展正则表达式

您尝试过的表达式的两个主要问题是:

  1. 不适当地使用[][]允许您定义字符集,例如,[abcd]匹配指定字符之一。
  2. 表达式中引号的引用或转义不正确。如果您引用双引号(")中的某些内容,则需要转义引用字符串中的双引号:\"在引用的字符串中生成"。如果您根本没有引用您的表达式,那么(也需要转义。
票数 3
EN

Stack Overflow用户

发布于 2017-11-17 21:09:06

对于AND搜索,最好是链接grep,可以处理OR

假设我们在寻找单词cat"ata"'ata'。如果你只对文件名感兴趣,而不是真正的匹配.

代码语言:javascript
复制
grep -wilm1 cat file* | xargs  grep -wilEm1 "'ata'|\"ata\""

file1
file2

搜索全文匹配-w (非子字符串),在第一次匹配-m1之后退出,忽略大小写(-i)。OR需要-E标志。-l只打印文件名。

下面是用于测试的文件。

代码语言:javascript
复制
==> file1 <==
cat
fat hat "ata"

==> file2 <==
cat fat hat 'ata'

==> file3 <==
cat fat hat ata

==> file4 <==
category fat hat ata
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47358807

复制
相关文章

相似问题

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