gpt4 book ai didi

linux - 为什么 grep 给出意想不到的结果?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:48 24 4
gpt4 key购买 nike

我有扩展名为 .m 和 .slx 的文件。我想使用 grep 从 svn 日志中检查修改后的 m 文件:使用

svn status | grep "M  " | grep ".m"

我明白了

M       foo.m
M model1.slx.

我希望只看到 foo.m。但为什么我也看到了 model1.slx?它应该被第二个grep过滤掉。

最佳答案

您看到的问题是因为 . 是正则表达式上下文中的元字符,需要对其进行转义以剥夺其特殊含义(以匹配任何字符)。

如果您只想列出以 .m.slx 结尾的文件,或者以 M 开头并以结尾的文件,您的要求不明确使用 .m。前者使用下面的建议,后者使用 grep ^M.*\.m$

通过启用-E 扩展正则表达式支持模式,您可以只使用一个grep

svn status | grep -E '(\.m|\.slx)$' 

交替 | 运算符在 ERE 模式下默认启用,但在使用 BRE(基本正则表达式)模式时需要转义

svn status | grep '\.m$\|\.slx$'

关于linux - 为什么 grep 给出意想不到的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49672314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com