grep: шаблон соответствия в определенном положении

Мне нужно сопоставить шаблон с grep , только если он начинается в позиции 16. Предположим, я хочу совместить строку ' pattern' (начиная с пробела).

Следующее должно соответствовать

 bla bla bla bla pattern 

тогда как следующее не должно совпадать, потому что шаблон поиска не начинается в pos. 16:

 bla bla bla bla foo foo pattern 

Я попытался использовать это регулярное выражение

 egrep '.*\{15\} pattern' 

но это, похоже, не работает по желанию.

Может кто-нибудь предложить решение?

Я думаю, что вы ищете:

 grep -E '^.{15} pattern' 

Это будет хорошо в большинстве случаев использования. Однако обратите внимание, что он не будет «соответствовать» только части pattern , но все до того, как оно будет включено в матч. Вы увидите это путем выделения grep (если --color задан напрямую или включен в псевдоним оболочки). Без цвета это повлияет на 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 .