正则表达式 - 查找所有不匹配模式的字符串

regex - Find all strings not matching a pattern

我们每天都会收到一个包含数千行数据的文件。偶尔,几行会被弄乱,导致自动化流程失败。发生这种情况时,可能很难找到错误。

我想使用正则表达式来查找任何不符合文件通常结构的内容。所有行应该如下所示:

ABC|SomeText|MoreText
DEF|SomeText|MoreText
ABC|SomeText|MoreText
GHI|SomeText|MoreText
DEF|SomeText|MoreText

因此,一个正则表达式可以标记不是以 3 个字母和竖线开头的行。 在下面的示例中,它将标记第 3 行。

ABC|SomeText|MoreText
DEF|Some
Text|MoreText
ABC|SomeText|MoreText
GHI|SomeText|MoreText
DEF|SomeText|MoreText

任何帮助将不胜感激,我已经为此苦苦挣扎了一段时间。

非常感谢

例如使用awk:

awk '!/^[a-zA-Z]{3}\|/' input.txt

将显示 'flagged' 行。

awk '/^[a-zA-Z]{3}\|/' in.txt

将显示正确的行。

解释一下您使用的正则表达式的方言会很有帮助。例如,如果你正在使用 grep,你可以只使用 -v 选项来反转意义,然后只写一个普通的正则表达式,像这样:

grep -v -E '^[A-Z]{3}\|[^|]*\|'

否则,如果你不能颠倒意义,但你有一个能够使用 negative lookahead(如 Perl)的系统,你可以执行以下操作:

grep -P '^(?![A-Z]{3}\|[^|]*\|)'

(?!...) 部分进行否定前瞻。所以这将匹配开头后面没有跟随三个大写字母、一个小节、一些文本然后是另一个小节的任何行。