次の行を使用して、カンマまたはダッシュで区切られた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"