7개의 숫자로 구성된 시퀀스가 ​​아닌 모든 행을 삭제합니다.

7개의 숫자로 구성된 시퀀스가 ​​아닌 모든 행을 삭제합니다.

다음과 같은 텍스트 파일이 있습니다.

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;;;;;;

올바른 줄은 세미콜론으로 구분된 일련의 7개 숫자입니다. MG;;;;;;또는 와 같이 임의의 위치에 정크 행인 행이 있습니다 .SP;SP;;;;;

수천 줄이 포함된 파일에서 이러한 잘못된 줄을 제거하고 일련의 7개 숫자가 있는 줄만 유지하려면 터미널에 어떤 명령을 입력해야 합니까?

답변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:]]

관련 정보