grep -v는 grep의 보완을 반환하지 않습니다.

grep -v는 grep의 보완을 반환하지 않습니다.

파일에서 공백으로 시작하는 줄을 필터링하고 싶습니다. 다음 명령을 사용합니다.

grep -v "^ " < input > input_no_starting_space

결과를 다시 확인하기 위해 다음 명령을 실행합니다.

grep "^ " < input > double_check

input_no_starting_space그런 다음 합계의 행 수를 계산하고 double_check해당 합계가 의 행 수와 같은지 확인합니다 input. 이를 위해 나는 wc -l.

어떤 이유로 이 검사가 실패했습니다. 즉, 행 번호의 합이 의 행 수보다 작습니다 input. 내 파일에는 수백만 줄이 있지만 작은 예에서는 문제를 재현할 수 없는 것 같습니다. grep을 사용하는 방식에 문제가 있습니까(제가 원 grep하고 grep -v항상 서로 보완하기 때문에), 아니면 이것이 내 파일의 아티팩트일 가능성이 더 높습니까? 후자라면 이 유물은 무엇일까요?

이것은 GNU grep 3.4를 사용하는 Ubuntu 20.04.3에 있습니다.

답변1

input_file귀하의 데이터 에는 단순한 텍스트 데이터 이상의 내용이 포함될 가능성이 있습니다 .

grepwith 옵션을 사용해 보세요 -a.

데이터 인코딩 및 NULL 값에 대한 명령 --binary-files=TYPE옵션 grepman grep첫 번째 단락도 참조하세요.

파일의 데이터 또는 메타데이터가 파일에 이진 데이터가 포함되어 있음을 나타내는 경우 해당 파일은 TYPE 유형으로 간주됩니다. 텍스트가 아닌 바이트는 이진 데이터를 나타냅니다. 이는 현재 로케일에 대해 잘못 인코딩된 출력 바이트이거나 -z 옵션이 제공되지 않은 경우 빈 입력 바이트입니다.

관련 정보