カンマまたはダッシュで区切られた5桁の数字を含むファイルを解析したいのですが、次のような行です。
12345,23456,34567-45678,12345-23456,34567
私の目標は、間違ったフォーマットの行を見つけることです。カンマまたはダッシュ以外の文字で区切られた5桁で構成されていない数字を含む行。
私はファイルをegrepしようとしました:
cat file.txt | egrep -v [-,]*[0-9]{5}[,-]*
行の内容を指定するには:
何か提案がありますか?
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"
grep
の適切な解決策については、 ステファンの回答 を参照してください。代わりに、これはPerlのものです:
Perl -ne 'print if grep{$_!~/^\d{5}$/} split(/[,-]/); ' file
これは、,
または-
で各入力行を分割し、正確に5つの数値で構成されていない分割配列のメンバーを探します。見つかった場合は、その行が出力されます。
cat
は必要ありません。これはあなたが望むことをしますか:
$ grep -v -E '^([0-9]{5}(,|-))+' <FILE>
たとえば、FILE
に次の内容がある場合:
12345,23456,34567-45678,12345-23456,34567
1,2
12345*23456,34567-45678,12345-23456,34567
123456
1234*23456,34567-45678,12345-23456,34567
結果は次のようになります:
$ grep -v -E '^([0-9]{5}(,|-))+' 5d
1,2
12345*23456,34567-45678,12345-23456,34567
123456
1234-23456,34567-45678,12345-23456,34567