我有一个像这样的文本文件:
229;39;45;11;21;33;13
230;56;44;41;40;08;53
231;16;59;27;42;44;36
232;29;19;41;22;37;59
233;45;03;24;36;07;32
SP;SP;SP;;;;
234;15;45;54;25;42;41
235;29;41;55;02;31;22
236;10;52;50;57;25;60
237;36;07;45;31;56;57
238;15;09;41;13;37;42
SP;SP;;;;;
239;33;21;44;46;47;06
240;59;28;25;41;57;38
241;11;57;40;35;56;31
242;22;07;04;21;28;56
243;20;47;23;32;16;11
244;19;60;50;24;47;33
245;44;51;27;53;08;60
MG;;;;;;
正确的行是由分号分隔的七个数字组成的序列。在随机位置上,有些行是垃圾行,例如MG;;;;;;
或SP;SP;;;;;
我应该在终端上输入什么命令才能从包含数千行的文件中删除这些错误的行,只保留七个数字序列的行?
答案1
grep -Ex '[0-9]+(;[0-9]+){6}'
...根据您的输入数据产生以下输出:
229;39;45;11;21;33;13
230;56;44;41;40;08;53
231;16;59;27;42;44;36
232;29;19;41;22;37;59
233;45;03;24;36;07;32
234;15;45;54;25;42;41
235;29;41;55;02;31;22
236;10;52;50;57;25;60
237;36;07;45;31;56;57
238;15;09;41;13;37;42
239;33;21;44;46;47;06
240;59;28;25;41;57;38
241;11;57;40;35;56;31
242;22;07;04;21;28;56
243;20;47;23;32;16;11
244;19;60;50;24;47;33
245;44;51;27;53;08;60
答案2
和sed
:
sed -n '/^[0-9][0-9]*\(;[0-9][0-9]*\)\{6\}$/p' <infile
答案3
egrep '^[0-9]+;[0-9]+;[0-9]+;[0-9]+;[0-9]+;[0-9]+;[0-9]+$' file > temp && mv temp file
答案4
这些并不像其他一些示例那样强大,但适用于简单的情况:
grep -v ';;'
或者
grep [[:digit:]]