grep。*列表给出了不必要的结果!如何处理?

问题描述 投票:1回答:1

为什么baseline.config.total.no.1of.banner=a_1baseline.config.total.no.2of.banner=b_2包含在输出中? baseline.config.total.no..*.不应该在1of2of之间需要一个点吗?

$ grep "baseline.config.total.no..*." ./output/messages_en.properties
baseline.config.total.no.1of.banner=a_1
baseline.config.total.no.2of.banner=b_2
baseline.config.total.no.1.of.banner=10-1streak
linux bash shell
1个回答
5
投票

.匹配任何东西,而不仅仅是一个点;那(和*的意思是“匹配最后一次0或更多次”)是为什么.*的意思是“匹配任何东西,零次或多次”。

因此,正则表达式baseline.config也将匹配字符串baseline-config,或字符串baselineoconfig - 点在未转义时或在字符类中始终是通配符。

由于你想要的点只匹配点,考虑[.] - 创建一个单字符字符类。与\.相比,这更可靠(对引用上下文不太敏感),另一种选择。

grep 'baseline[.]config[.]total[.]no[.].*[.]' 
© www.soinside.com 2019 - 2024. All rights reserved.