REGEX表达式如果忽略字符串则忽略一部分

时间:2018-10-01 10:30:41

标签: regex unix

我在Unix机器上的文件中有这样的字符串

26 3 24 21 391
26 34 24
26 3 49 24 21 391
26 94 24
26 3 21 391
26 3 
27 3 24 21 391
2 94

现在我想一次匹配多个数字。这些数字是固定的(常量),不需要匹配的模式即可识别它们。所以在这里,如果我想匹配94或24,我将使用以下表达式。

grep '\b\(94\|24\)\b' file_name.txt

但是我实际上需要找到既没有94也没有24的字符串。这意味着我想要所有不包含这些数字的行。我不想使用grep随附的选项(例如-v)。

编辑: 预期输出-

26 3 21 391
26 3 

1 个答案:

答案 0 :(得分:0)

您不能编写POSIX模式来匹配不包含某些多字符模式的字符串。

您可以使用

grep -Ev '\b[29]4\b' file

-E选项启用POSIX ERE合规性,\b[29]4\b模式匹配28,然后匹配4作为整个单词,而{{ 1}}反转匹配结果。

请参见online demo

如果您的v支持,也可以使用不带v选项的PCRE正则表达式:

grep

grep -P '^(?!.*\b[29]4\b)' file 启用PCRE regex引擎,P将字符串的开头与^(?!.*\b[29]4\b)匹配,然后如果0个字符后有{{1} }或^作为一个整体值。