egrep-f regexlist inputfile:在regexlist中显示未使用的模式

egrep-f regexlist inputfile:在regexlist中显示未使用的模式,regex,grep,Regex,Grep,egrep-f regexlist inputfile显示inputfile中的所有行 匹配regexlist中的任何正则表达式 grep -vf outputfile regexlist 我想知道regexlist中是否有任何行未使用 换句话说,我可以从中删除哪些行(正则表达式) regexlist以获得相同的结果 有没有一种有效的方法可以做到这一点?我能想到几个 低效的方法(例如,一次测试一个模式,甚至 使用egrep-v减少输入文件或其他内容) 更棘手的问题是:如何有效地在 regex

egrep-f regexlist inputfile
显示
inputfile
中的所有行 匹配
regexlist
中的任何正则表达式

grep -vf outputfile regexlist 
我想知道
regexlist
中是否有任何行未使用

换句话说,我可以从中删除哪些行(正则表达式)
regexlist
以获得相同的结果

有没有一种有效的方法可以做到这一点?我能想到几个 低效的方法(例如,一次测试一个模式,甚至 使用
egrep-v
减少输入文件或其他内容)

更棘手的问题是:如何有效地在
regexlist
?换句话说,不匹配行的正则表达式 在
inputfile
中,但仅限已与其他行匹配的行
regexlist
中的正则表达式

grep -vf outputfile regexlist 
其中,
outputfile
通过regexlist-inputfile>outputfile的
egrep-导出

鉴于我要求您在第一次grep中使用-o开关,这是一个可接受的解决方案吗

工作原理:

  • 使用
    -o
    开关,您只匹配与您在文件
    regexlist
    中提供的字符串匹配的确切字符串(而不是整行)

  • 您可以在文件
    outputfile
    中捕获匹配项。
    outputfile
    仅包含在
    inputfile
    中找到的字符串

  • 您可以使用grep的-v开关(打印所有不匹配的行)从regexlist中打印出与inputfile中的任何行不匹配的所有行。这些是来自
    regexlist
    的行,它们与
    inputfile


  • 注意:在回答这个问题的过程中,我意识到这适用于
    regexlist
    中的正则字符串,而不是实际的正则表达式。

    这是一个好问题。我怀疑是否有预构建的工具可以实现这一点,但如果您自己编写(或编辑)grep,您可能能够相对便宜地跟踪这些信息(至少对于第一部分来说,第二部分将是昂贵的,无论你怎么做,我认为,因为你需要保持一个列表,列出每个模式匹配的所有行,并不断比较这些列表)。我可以编写一个egrep,将
    inputfile
    中的每一行与
    regexlist
    中的每一个正则表达式进行比较,但这似乎非常昂贵。当然,egrep更有效(在这种情况下,编写我自己的可能是个坏主意)。我想我可以从模式列表中删除一个模式,以便在匹配后进行检查,但看起来仍然更难看。我想可能会有一些正则表达式分析工具,可以用来查找完全冗余的模式(即只匹配其他模式已匹配的内容的模式)但我不知道有什么现成的方法。我并不是建议你自己写grep,我的观点更重要的是没有grep/etc过程。我想不出任何不花钱的方法来做。但是如果你在这个过程中,那么进行必要的跟踪应该不会很困难。我花了几秒钟的时间来看看为什么这样做。也许可以补充一点解释?当你知道的时候,这是很明显的,但作为一个答案,这可能是令人困惑的。不过,我还是向上投票。当然,经过编辑。还意识到了一个相当重要的限制:(我以前在字符串上使用这种技术,而不是在正则表达式上。