grep:指定された位置で一致する行を開始します(最初のn文字をスキップ)

grep:指定された位置で一致する行を開始します(最初のn文字をスキップ)

次の形式行を含むファイルがあります。

2021-Jan-26 05:35  foo bar 2
2021-Jan-26 05:37  asdf 2 foo bar
2021-Jan-26 05:37  foo

私が興味のあるパターンは、位置20から始まります。したがって、特定のパターンのファイルを見つけるときは、最初の19文字をスキップしたいと思います(一致しません)。

だから最初の19文字を除いて、行のどこでもパターンを一致させたいと思います。

上記の例では、 を grep すると2ライン 1 とライン 2 のみを一致させようとします。

どうすればいいですかgrep

答え1

grep最初の19文字を無視し、必要なパターンのみを一致させるGNUオプションを使用してください。

grep -P "(?<=.{19})2" file

出力:

2021年1月26日 05:35 プーバ2
2021年1月26日05:37 asdf2豊富なバー

答え2

実際に最初の19個を一致させたいのですが「何でも」と一致させます。

だから

grep '^....................*2' 

20点あります。^行の先頭にパターンを固定します。次の19点はそれぞれ1文字に一致するため、効果的にスキップされます。次に、.*ゼロ個以上の文字を一致させ、目的の2パターンを一致させます。

次の方法で効率を向上できます。

grep '^..................[^2]*2'

行の先頭に一致し、19文字以上が一致し、2この2場合には大きな違いはありませんが、検索されるパターンがより複雑な場合、この最適化は非常に役立ちます。

関連情報