我需要将模式与 匹配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
部分。