我在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
答案 0 :(得分:0)
您不能编写POSIX模式来匹配不包含某些多字符模式的字符串。
您可以使用
grep -Ev '\b[29]4\b' file
-E
选项启用POSIX ERE合规性,\b[29]4\b
模式匹配2
或8
,然后匹配4
作为整个单词,而{{ 1}}反转匹配结果。
请参见online demo。
如果您的v
支持,也可以使用不带v
选项的PCRE正则表达式:
grep
grep -P '^(?!.*\b[29]4\b)' file
启用PCRE regex引擎,P
将字符串的开头与^(?!.*\b[29]4\b)
匹配,然后如果0个字符后有{{1} }或^
作为一个整体值。