grep:在特定位置匹配模式

grep:在特定位置匹配模式

我需要将模式与 匹配grep,前提是它从位置 16 开始。假设我想匹配字符串' pattern'(以空格开头)。

以下内容应匹配

bla bla bla bla pattern

而以下不应该匹配,因为搜索模式不是从 pos 开始。 16:

bla bla bla bla foo foo pattern

我尝试过使用这个正则表达式

egrep '.*\{15\} pattern'

但这似乎并没有按预期工作。

有人可以建议一个解决方案吗?

答案1

我认为您正在寻找的是:

grep -E '^.{15} pattern'

这在大多数使用情况下都可以。但请注意,它不会仅“匹配”该pattern部分,而是它之前的所有内容也将包含在匹配中。您将通过突出显示grep(如果--color直接给出或已包含在 shell 别名中)看到这一点。如果没有颜色,则会影响grep -o只打印匹配的部分。例如:

$ echo 'bla bla bla bla pattern' | grep -Eo '^.{15}( pattern)'
bla bla bla bla pattern

为了避免 GNU grep 出现这种情况,您可以使用带有后视功能的 perl 表达式。例如:

$ echo 'bla bla bla bla pattern' | grep -Po '(?<=^.{15}) pattern'
 pattern

这仅“匹配”该pattern部分。

相关内容