Grep 正確な桁数とその他の文字

Grep 正確な桁数とその他の文字


次の行を使用して、カンマまたはダッシュで区切られた5桁の数字を含むファイルを解析したいと思います。

私の目標は、フォーマットが間違った行を見つけることです。カンマまたはダッシュ以外の文字で区切られた5桁以外の数字を含む行。

次のコマンドを使用してファイルをegrepしようとしました。

cat file.txt | egrep -v [-,]*[0-9]{5}[,-]*

  • ただし、6桁の数字がある場合は一致し、その行は表示されません。
  • 4桁の数字がある場合は一致しませんが、同じ行の他の数字は一致し、行は表示されません。

行の内容を指定するには、次のようにします。

  • 番号は5桁でなければなりません。
  • 範囲はダッシュとして定義されます(例:12345-12389)。
  • 1行には、1つの数字から複数の数字および範囲まで、任意の順序で含めることができます。

どんな提案がありますか?

ベストアンサー1

grep -vxE '([0-9]{5}[,-])*[0-9]{5}'

無効な行が報告されます。

または無効にしたい場合12345-12345-12345

num='[0-9]{5}'
num_or_range="$num(-$num)?"
grep -vxE "($num_or_range,)*$num_or_range"

おすすめ記事