Grep和正则表达式:行为不一致

时间:2010-07-06 13:35:28

标签: regex linux grep

我正在使用Linux机器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不理解元字符\ S和\ s。

两个方框都在运行:grep 2.5.1和bash 3.2.25

这怎么可能?

干杯, 丹

1 个答案:

答案 0 :(得分:1)

grep man page判断。看来如果你可以使用像\s这样的东西你正在使用Perl正则表达式。将-P选项传递给grep时使用的选项。因此,可能是该选项是在机器A上自动设置而不是在机器B上设置的。原因可能是某些别名,或者该选项在GREP_OPTIONS中设置。