关于grep模式搜索的困惑

时间:2014-02-14 17:42:18

标签: regex bash grep

考虑这个日志文件

SN      PID     Date                            Status
1       P01     Fri Feb 14 19:32:36 IST 2014    Alive
2       P02     Fri Feb 14 19:32:36 IST 2014    Alive
3       P03     Fri Feb 14 19:32:36 IST 2014    Alive
4       P04     Fri Feb 14 19:32:36 IST 2014    Alive
5       P05     Fri Feb 14 19:32:36 IST 2014    Alive
6       P06     Fri Feb 14 19:32:36 IST 2014    Alive
7       P07     Fri Feb 14 19:32:36 IST 2014    Alive
8       P08     Fri Feb 14 19:32:36 IST 2014    Alive
9       P09     Fri Feb 14 19:32:36 IST 2014    Alive
10      P010    Fri Feb 14 19:32:36 IST 2014    Alive

当我做=> grep "P01" File
输出为:(按预期

1       P01     Fri Feb 14 19:32:36 IST 2014    Alive
10      P010    Fri Feb 14 19:32:36 IST 2014    Alive

当我做=> grep " P01 " File注意 P01 之前和之后的空格)
我没有得到任何输出!

问题: grep匹配一行中的模式,因此“P01”(的空间)应与P01的第一个PID匹配,因为它有空格围绕它......但似乎这种逻辑是错误的......我在这里看到的明显的东西!!!?

1 个答案:

答案 0 :(得分:2)

如果日志使用制表符而不是空格,则grep模式将不匹配。我会在你想要找到的单词上添加单词边界:

grep '\<P01\>' file

如果您确实想在模式中使用空格,请使用以下方法之一:

grep '[[:blank:]]P01[[:blank:]]' file    # horizontal whitespace, tabs and spaces
grep -P '\sP01\s' file                   # using Perl regex