用grep匹配包含偶数的行

时间:2020-10-13 14:58:02

标签: regex grep

我正在处理有关grep的一系列问题,并且我一直试图以任何方式匹配包含偶数的行(因此,它应该匹配'hello22 23''8',{{1} },'2222 2999 1'等)

问题是,尽管我设法匹配了所有这些情况,但我找不到一种匹配情况的方法,在该情况下,行要么仅包含偶数,要么是EOL前最后一次出现('hello2hello9''22',以数字结尾的任何内容都应该匹配)。

到目前为止,这是我正在使用的:

'hello8'

上面的内容匹配所有后跟偶数的数字,后面没有任何数字。

我尝试使用grep -P '((.)*[02468][^0-9](.)*)' 正则表达式进行匹配,但没有效果。可能是grep无法正确检测到我的EOL吗?

1 个答案:

答案 0 :(得分:1)

我想我明白您的意思-您想避免可能包含偶数数字的行,但它们所包含的数字都不是偶数。示例包括323a2323a3a49。您要匹配具有至少一个偶数的行:22232a3232a45a5bb44

grep -P '[02468](?=\D|$)'模式可确保至少出现一个偶数位,后面跟着EOL或使用前行的非数字位,应符合您的要求。

$ cat test.txt
3
23
a23
23a
3a49
2
22
32
a32
32a
45a5bb44
$ grep -P '[02468](?=\D|$)' test.txt
2
22
32
a32
32a
45a5bb44