파일에서 공백으로 시작하는 줄을 필터링하고 싶습니다. 다음 명령을 사용합니다.
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
귀하의 데이터 에는 단순한 텍스트 데이터 이상의 내용이 포함될 가능성이 있습니다 .
grep
with 옵션을 사용해 보세요 -a
.
데이터 인코딩 및 NULL 값에 대한 명령 --binary-files=TYPE
옵션 grep
과 man grep
첫 번째 단락도 참조하세요.
파일의 데이터 또는 메타데이터가 파일에 이진 데이터가 포함되어 있음을 나타내는 경우 해당 파일은 TYPE 유형으로 간주됩니다. 텍스트가 아닌 바이트는 이진 데이터를 나타냅니다. 이는 현재 로케일에 대해 잘못 인코딩된 출력 바이트이거나 -z 옵션이 제공되지 않은 경우 빈 입력 바이트입니다.