首页 > 解决方案 > 在行尾使用 grep 中的正则表达式进行模式匹配

问题描述

我有一个文件,比如说 abc.txt,其中包含以下类型的数据:

AB8PDSYU_DFRH

AB8PDSPO_RET

AB8PDSYT_DPRO

AB0PDSTR_GHRJT

AB0PDSQW_GTJY

我的预期输出只是格式A{either B0 or B8}PDS{exactly 2 char}_{exactly 4 char},根据这条规则,我的输出应该是:

AB8PDSYU_DFRH

AB8PDSYT_DPRO

AB0PDSQW_GTJY

我正在使用以下 grep 命令:

grep -E '^A(B0|B8)PDS[[:alpha:]]{2}_[[:alpha:]]{4}' abc.txt

并获得输出:

AB8PDSYU_DFRH

AB8PDSYT_DPRO

AB0PDSTR_GHRJT

AB0PDSQW_GTJY

我已经提到[[:alpha:]]{4},理想情况下应该只匹配 4 个字母。但是,它不是这样工作的,并且在输出中也给了我AB0PDSTR_GHRJT 。

请让我知道我在这里缺少什么。

标签: regex

解决方案


您需要添加一种方法来检测您在匹配之后不再需要更多内容,否则它匹配行的一部分,例如$精确字符串的结尾,或[[:space]](相当于\s)任何空格。

我不是 grep 方面的专家,这取决于它是否处理多行,其中之一应该可以工作:

^A(B0|B8)PDS[[:alpha:]]{2}_[[:alpha:]]{4}$
^A(B0|B8)PDS[[:alpha:]]{2}_[[:alpha:]]{4}($|[[:space]])

推荐阅读