我正在使用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
这怎么可能?
干杯, 丹
答案 0 :(得分:1)
从grep man page判断。看来如果你可以使用像\s
这样的东西你正在使用Perl正则表达式。将-P
选项传递给grep时使用的选项。因此,可能是该选项是在机器A上自动设置而不是在机器B上设置的。原因可能是某些别名,或者该选项在GREP_OPTIONS
中设置。