maz*_*azs 6 grep text-processing regular-expression
我想解析一个包含由逗号或破折号分隔的 5 位数字的文件,例如:
12345,23456,34567-45678,12345-23456,34567
我的目标是找到格式不正确的行,例如。包含不是由 5 位数字组成的数字的行,由逗号或破折号以外的其他字符分隔。
我尝试使用以下命令 egrep 文件:
cat file.txt | egrep -v [-,]*[0-9]{5}[,-]*
要指定行内容:
请问有什么建议吗?
Sté*_*las 10
grep -vxE '([0-9]{5}[,-])*[0-9]{5}'
Run Code Online (Sandbox Code Playgroud)
会报告不正确的行。
或者,如果您还想禁止12345-12345-12345:
num='[0-9]{5}'
num_or_range="$num(-$num)?"
grep -vxE "($num_or_range,)*$num_or_range"
Run Code Online (Sandbox Code Playgroud)
有关好的grep解决方案,请参阅Stéphane 的回答。作为替代方案,这里有一个 Perl:
perl -ne 'print if grep{$_!~/^\d{5}$/} split(/[,-]/); ' file
Run Code Online (Sandbox Code Playgroud)
这将在,or上拆分每个输入行-,然后查找不完全由 5 个数字组成的拆分数组的成员。如果找到,则打印该行。