我有扩展名为 .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/