2つの数字のみを含む文字列をGrepします。

2つの数字のみを含む文字列をGrepします。

文字列を含むサンプルファイルがあります。

GABCDF64V3
HABDDF61WE
KABSDF6WER
HAADYF6WE2

文字列に2つの数値(文字列の任意の位置)を含めるだけです。つまり、出力は次のようになります。HABDDF61WEそしてハーディF6WE2ただ。

こんな表現を使ってみました

grep -E '.*[0-9]{1,}.*[0-9]{1,}.*'

しかし、出力は異なります

答え1

grepでこれを行うには、次のものが必要です。全体的にゼロ個以上の数字以外の数字、数字、ゼロ個以上の数字以外の数字、最後に数字以外のゼロ個以上の数字で構成されます。例えば

$ grep -x '[^0-9]*[0-9][^0-9]*[0-9][^0-9]*' file
HABDDF61WE
HAADYF6WE2

(ラテン十進数のみ)または

$ grep -Px '\D*\d\D*\d\D*' file
HABDDF61WE
HAADYF6WE2

-xgrep実装が/オプションを提供していない場合は、ラインアンカーを使用--line-regexpできます。^$

$ grep '^[^0-9]*[0-9][^0-9]*[0-9][^0-9]*$' file
HABDDF61WE
HAADYF6WE2

またはawkex。

$ awk 'gsub(/[[:digit:]]/,"&") == 2' file
HABDDF61WE
HAADYF6WE2

gsub交換回数を返します)。 Perlを使用して同様の操作を実行できますtr

答え2

awk -F '[0-9]' 'NF==3' file

数字に分割すると、3つのフィールドを持つ行は2つの数字を持つ行になります。

関連情報