为什么我的正则表达式中的换行符匹配整行?

时间:2016-04-14 13:56:37

标签: regex

据我了解正则表达式

^1.*\n

应匹配以1开头的行,后跟任意数量的字符和换行符,然后停止。使用Perl正则表达式时它实际上做的是匹配以1开头的行,后跟任意数量的字符和换行符char 然后整行以下行

-bash-3.2$ cat testfile
1   dghdfgdgdgdfgdfggd
2   dghdfgdgdgdfgdfggd
3   dghdfgdgdgdfgdfggd
1   dghdfgdgdgdfgdfggd
2   dghdfgdgdgdfgdfggd
3   dghdfgdgdgdfgdfggd
1   dghdfgdgdgdfgdfggd
2   dghdfgdgdgdfgdfggd
3   dghdfgdgdgdfgdfggd

-bash-3.2$ grep -P '^1.*' testfile
1   dghdfgdgdgdfgdfggd
1   dghdfgdgdgdfgdfggd
1   dghdfgdgdgdfgdfggd
-bash-3.2$ grep -P '^1.*\n' testfile
1   dghdfgdgdgdfgdfggd
2   dghdfgdgdgdfgdfggd
1   dghdfgdgdgdfgdfggd
2   dghdfgdgdgdfgdfggd
1   dghdfgdgdgdfgdfggd
2   dghdfgdgdgdfgdfggd

我实际上是在研究一个更长的多线模式,并想知道它为什么不起作用,并将其追溯到上述问题。我的问题主要是"为什么它会以这种方式行事",但我很高兴听到如何获得我想要的比赛。

由于

1 个答案:

答案 0 :(得分:1)

默认情况下,grep输出匹配的。要覆盖该行为,请传递-o选项。

grep -oP '^1.*\n' testfile`. 

请参阅grep documentation

  

-o
  --only-matching
  仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上。