regex - 在行尾使用 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 。
请让我知道我在这里缺少什么。
解决方案
您需要添加一种方法来检测您在匹配之后不再需要更多内容,否则它匹配行的一部分,例如$
精确字符串的结尾,或[[:space]]
(相当于\s
)任何空格。
我不是 grep 方面的专家,这取决于它是否处理多行,其中之一应该可以工作:
^A(B0|B8)PDS[[:alpha:]]{2}_[[:alpha:]]{4}$
^A(B0|B8)PDS[[:alpha:]]{2}_[[:alpha:]]{4}($|[[:space]])
推荐阅读
- dataweave - JSON 对象忽略 null
- c# - 实现自定义两因素身份验证,为什么 GetTwoFactorAuthenticationUserAsync() 返回一个空用户?
- c++ - 从负 int 静态转换为 uint
- c++ - C ++指针的指针是否自动访问新值?
- asp.net-core - 如何在 Asp .Net Core SignalR Hub 中获取不记名令牌?
- reactjs - 如何从 react-scripts 中删除未使用的依赖项?
- ansible - 在一组主机上运行 ansible 任务,每个主机也作为参数传递给任务
- firebase - Firebase Auth SendEmailVerificationAsync 在收件人电子邮件上失败
- c# - CS0311 受约束的泛型方法没有隐式引用转换
- python - 使用python从twilow api发送多目的地调用?