我正在处理有关grep的一系列问题,并且我一直试图以任何方式匹配包含偶数的行(因此,它应该匹配'hello22 23'
,'8'
,{{1} },'2222 2999 1'
等)
问题是,尽管我设法匹配了所有这些情况,但我找不到一种匹配情况的方法,在该情况下,行要么仅包含偶数,要么是EOL前最后一次出现('hello2hello9'
,'22'
,以数字结尾的任何内容都应该匹配)。
到目前为止,这是我正在使用的:
'hello8'
上面的内容匹配所有后跟偶数的数字,后面没有任何数字。
我尝试使用grep -P '((.)*[02468][^0-9](.)*)'
正则表达式进行匹配,但没有效果。可能是grep无法正确检测到我的EOL吗?
答案 0 :(得分:1)
我想我明白您的意思-您想避免可能包含偶数数字的行,但它们所包含的数字都不是偶数。示例包括3
,23
,a23
,23a
,3a49
。您要匹配具有至少一个偶数的行:2
,22
,32
,a32
,32a
,45a5bb44
等
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