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