繁体   English   中英

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

[英]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

将显示“已标记”行。

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

将显示正确的行。

解释您使用的正则表达式的方言将非常有帮助。 例如,如果您使用的是grep,则可以只使用-v选项来反转含义,然后只需编写一个普通的正则表达式即可,如下所示:

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

否则,如果您无法反转感觉,但是您拥有一个能够使用负向超前的系统(例如Perl),则可以执行以下操作:

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

(?!...)部分使负前瞻。 因此,这将匹配任何开头不后跟三个大写字母,一个栏,一些文本然后另一个栏的行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM