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色がない場合は、grep -o印刷する一致する部分にのみ影響します。たとえば、

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

GNU grepでこの動作を回避するには、LookbehindでPerl式を使用できます。たとえば、

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

これはそのpattern部分にのみ「一致」します。

関連情報