正则表达式 - 查找所有不匹配模式的字符串
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}\|[^|]*\|)'
(?!...)
部分进行否定前瞻。所以这将匹配开头后面没有跟随三个大写字母、一个小节、一些文本然后是另一个小节的任何行。
我们每天都会收到一个包含数千行数据的文件。偶尔,几行会被弄乱,导致自动化流程失败。发生这种情况时,可能很难找到错误。
我想使用正则表达式来查找任何不符合文件通常结构的内容。所有行应该如下所示:
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}\|[^|]*\|)'
(?!...)
部分进行否定前瞻。所以这将匹配开头后面没有跟随三个大写字母、一个小节、一些文本然后是另一个小节的任何行。