【问题标题】:Grep and regex: inconsistent behaviour [duplicate]Grep 和正则表达式:不一致的行为
【发布时间】:2010-07-06 13:35:27
【问题描述】:

我在 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

这怎么可能?

干杯, 丹

【问题讨论】:

标签: regex linux grep


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 2017-02-09
    相关资源
    最近更新 更多