egrep은 일치하지 않아야 하는 행과 일치합니다.

egrep은 일치하지 않아야 하는 행과 일치합니다.

CSV의 부동 소수점을 포함하는 첫 번째 열의 부동 소수점이 소수점 뒤에 1인지 확인하려고 합니다. 내 CSV의 샘플 행은 다음과 같습니다.

1082805252197942751,34225793738713276,serialtooldata,1,대상,75512140,125.0,63.0,29.0,1,,,,0,899,,

일곱 번째 열은 제가 관심 있는 열이고, 그 위의 행에는 소수점 이하 1이 없습니다(125.0)

나는 두 가지 가능한 정규 표현식을 생각해 냈습니다.

^[0-9]+,[0-9]+,[a-z0-9]+,[0-9]+,[A-Za-z0-9\ ]+,[0-9]+,[0-9]+\.1

또는

^[A-Za-z0-9\ ,]+\.1

이 두 가지 모두 작동하는 것 같습니다. 즉, regex101과 같은 정규식 테스트 페이지에서여기그리고여기)는 정규 표현식과 정확하게 일치하지 않습니다. 하지만 이렇게 터미널에서 시도해 보면

egrep ^[0-9]+,[0-9]+,[a-z0-9]+,[0-9]+,[A-Za-z0-9\ ]+,[0-9]+,[0-9]+\.1 tool_data_160321.csv

또는

egrep ^[A-Za-z0-9\ ,]+\.1 tool_data_160321.csv

그러면 해당 행이 일치 항목으로 나열됩니다. egrep이 줄은 정규식과 일치한다고 생각되는데 그렇지 않은 이유는 무엇입니까 ?

답변1

따옴표가 누락되었기 때문입니다. 백슬래시는 쉘에 의해 해석되며 grep 명령은 대신 백슬래시를 가져오므 .1\.1백슬래시 뒤에 오는 모든 문자와 일치합니다 1.

전체 문자열을 인용하는 것이 좋습니다.

egrep '^[A-Za-z0-9\ ,]+\.1' tool_data_160321.csv

또는 이 경우 인용 문자를 인용하십시오.

egrep ^[A-Za-z0-9\ ,]+\\.1 tool_data_160321.csv

두 번째 예는 어떤 파일이 존재하는지에 따라 여전히 놀라움을 유발할 수 있으므로 전체 문자열을 인용하면 절대 틀리지 않습니다.

관련 정보