如何查找特定字符串并将其作为同一文件中新查找的条目

时间:2017-07-13 17:55:24

标签: regex linux bash grep

  1. 我需要在带有正则表达式的多个文件夹中的多个文件中找到一个字符串。该字符串可以包含多个文件。
  2. 当我找到它时,取出字符串并再次在同一个文件中搜索,但现在使用特定的字符串。
  3. 并返回找到字符串的文件名和字符串本身。
  4. 考虑使用grep命令来查找字符串,然后循环输出,但任何人都有任何想法更好地解决它?

    例如:

      

    在file.js中查看模式正则表达式: SearchMethod \(([a-zA-Z] *)\)

         

    找到后,使用另一个正则表达式 capture =('[a-zA-Z']')查找同一文件中的上一次捕获,并找到如下内容:

         

    来自 capture ='value';

         

    获取字符串'value'

         

    并返回字符串'值'以及它所属的文件名

1 个答案:

答案 0 :(得分:1)

首先,一些示例数据:

$ cat file
capture='foo'
capture='bar'
capture='baz'
capture='foobar'
SearchMethod(foo)
SearchMethod(bar)
SearchMethod(qux)

然后,获取“搜索字符串”,SearchMethod参数

$ search_strings=$( grep -oP 'SearchMethod\(\K\w+' file | paste -s -d'|' )
$ echo "$search_strings"
foo|bar|qux

然后,在输出

中搜索带有文件名的“捕获”字样
$ grep -HoP "capture='\\K($search_strings)\\b" file
file:foo
file:bar

\b为您提供了单词边界约束,这就是foobar未在最终输出中显示的原因。 需要GNU grep,你可以在Linux上获得。