我在Linux Box A上工作,运行以下命令:

grep '^\S*\s-' access_log

如预期,显示了一些行。
然后我转到机器B,我启动了完全相同的命令。但这次没用。
为了完成我需要的工作,我不得不启动这个程序:
grep '^[^ ]* -' access_log

在成功之前,我尝试了所有这些,但没有成功:
grep '^\S* -' access_log
grep '^\S*\s-' access_log
grep -e '^\S* -' access_log
grep -E '^\S* ' access_log

看起来机器B不理解元字符和。
两个盒子都在运行:grep 2.5.1和bash 3.2.25
怎么可能呢?
干杯,

最佳答案

grep man page判断。如果您可以使用\s之类的东西,那么您似乎正在使用perl正则表达式。当-P选项传递给grep时使用。因此,该选项可能是在机器A上自动设置的,而不是在机器B上。原因可能是某些别名,或者该选项是在GREP_OPTIONS中设置的。

关于regex - Grep和正则表达式:行为不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3186639/

10-11 23:12
查看更多