grep:正则表达式搜索所有但不搜索

grep:正则表达式搜索所有但不搜索

我很好奇,有多少书目词典我在过去几十年里收集的条目。所以我对自己说:“让我们为此编写一个快速脚本吧!”

对于那些不熟悉 BibTeX 的人:每个条目都以类型标识符开头,例如@book、等。实际上,定义了 50 多个不同的 tpye 标识符,但是将来可能会扩展吗?通常(但不一定)该标识符放置在行的开头。所以我的 1 号正则表达式应该包含匹配条目的起始行。@article@incollection[[:space:]]*@\w+

不幸的是,有三个标识符,它们不是开始参考书目来源:@comment@string@preamble。我偶尔会在我的文件中使用其中一些。为了匹配这些,我应该编写 regexp No. 2 like @((comment)|(string)|(preamble)),它工作得很好并且匹配得很好。

但最后三个表达式不应算作参考书目项目,因此我的最终正则表达式应为“查找第 1 号但不是第 2 号的所有正则表达式”

这是我未能组合这两个正则表达式组的地方。我通过管道两个正则表达式解决了这个问题,第二个使用开关-v来反转结果,但我确信,有一种方法可以将其写在一个正则表达式中。

答案1

您可以使用消极前瞻不匹配@commentstringpreamble(或以这些字符串开头的任何内容)如下:

grep -P '^[[:space:]]*@(?!comment|string|preamble)\w' file

相关内容