据我了解正则表达式
^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
我实际上是在研究一个更长的多线模式,并想知道它为什么不起作用,并将其追溯到上述问题。我的问题主要是"为什么它会以这种方式行事",但我很高兴听到如何获得我想要的比赛。
由于
答案 0 :(得分:1)
默认情况下,grep
输出匹配的行。要覆盖该行为,请传递-o
选项。
grep -oP '^1.*\n' testfile`.
-o
--only-matching
仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上。