文字列を含むサンプルファイルがあります。
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
-x
grep実装が/オプションを提供していない場合は、ラインアンカーを使用--line-regexp
できます。^
$
$ grep '^[^0-9]*[0-9][^0-9]*[0-9][^0-9]*$' file
HABDDF61WE
HAADYF6WE2
またはawk
ex。
$ awk 'gsub(/[[:digit:]]/,"&") == 2' file
HABDDF61WE
HAADYF6WE2
(gsub
交換回数を返します)。 Perlを使用して同様の操作を実行できますtr
。
答え2
awk -F '[0-9]' 'NF==3' file
数字に分割すると、3つのフィールドを持つ行は2つの数字を持つ行になります。