grepを使用して、特定の文字を含むX文字列を含むすべての行を見つけます。

grepを使用して、特定の文字を含むX文字列を含むすべての行を見つけます。

したがって、最後に単語がある一連の数字を含むテキストファイルがあります。

123456 126 2 12456 1256 4 46 12346 123456 4 56 word
24 245 1234 356 12346 6 3 346 245 5 12346 12356 word

8つ以上の文字列(1つ、6つ、またはその両方を含む)を含むすべての行を見つけたいです。したがって、最初の行には、1、6、またはその両方を含む8つの文字列(スペースで区切られている)があるため、渡されます。 2番目には、1、6、またはその両方を含む7つの文字列のみがあります。

次の正規表現を試しましたが、逆追跡制限エラーが発生します。([0-9]*(1|6)[0-9]* .*){8,}

ベストアンサー1

1正規表現を作成する代わりに、次のコードは最後のフィールドを除いてスペースで区切られたすべてのフィールドを繰り返し、またはが含まれている場合はカウンタをインクリメントします6。カウンタ値が8以上の場合、現在のレコードが出力されます。

awk '{ count = 0; for (i = 1; i < NF; ++i) count += ($i ~ "[16]") }; count >= 8' file

次のコードは同じことを行いますが、レコードを出力したい場合は計算を停止します。

awk '{ count = 0; for (i = 1; i < NF && count < 8; ++i) count += ($i ~ "[16]") }; count == 8' file

短い(読み取れない)行(カウンタが実行中です)。下に8)から:

awk '{c=8;for(i=1;i<NF&&c;++i)c-=$i~"[16]"}!c' file

おすすめ記事