【发布时间】:2018-05-01 17:05:24
【问题描述】:
我无法为 Grep 和 Regex 找出一个非常具体的用例。我搜索了很多,似乎无法找到答案。
我想从包含数百个不同程序的目录的根目录中递归运行 Grep。我希望输出打印到文本文件并列出与某些正则表达式匹配的所有文件的文件名。具体来说,这是我需要用英语做的:
查找包含文本 [stringA] AND ["stringB"] OR ['stringB'] 的所有文件,并将每个文件的文件路径打印到添加了一些上下文的输出文本文件。对于两个 stringB 片段,引号很重要,我只想找到带有单引号或双引号的 stringB 的文件。换句话说,
包含不带引号的 stringA 和带单引号或双引号的 stringB 的所有文件。
感谢任何帮助,谢谢!
编辑:抱歉问了一个糟糕的问题:)
我已经做了一些研究,并弄清楚了其中的一部分。我已经找到了寻找我正在寻找的字符串的正则表达式。实际的字符串是“ATA”。要在全局范围内查找它,不区分大小写,并且在它周围使用任一类型的引号,字符串两侧有一些空格或没有空格,我们可以使用:
/['"]\s*ATA\s*['"]/gi
我还需要找到的第一个字符串是一个函数调用:call wflnkmod( 其正则表达式是:
/call\swflnkmod\(/gi
现在我只需要弄清楚如何搜索文件并确保其中包含每个文件的实例,然后找出用于递归搜索所有文件并将它们打印到输出文件的 grep 命令!
【问题讨论】:
-
StackOverflow 期待你 try to solve your own problem first,我们也 don't answer homework questions。请更新您的问题以在minimal, complete, and verifiable example 中显示您已经尝试过的内容。如需更多信息,请参阅how to ask good questions,并拨打tour of the site :)
-
使用
grep -l获取与正则表达式匹配的所有文件的列表。要执行AND,请使用第一个正则表达式执行此操作,然后通过管道将其传递给xargs以运行第二个grep -l。 -
您可以使用
['"]匹配单引号或双引号。 -
希望这些提示足以让您尝试这样做。如果你不能让它工作,用你的代码编辑问题。
-
大部分都找不到吗?