파일에 캐리지 리턴이 포함된 경우 grep이 예기치 않은 출력을 인쇄하는 이유는 무엇입니까? [복사]

파일에 캐리지 리턴이 포함된 경우 grep이 예기치 않은 출력을 인쇄하는 이유는 무엇입니까? [복사]

이와 같이 grep을 실행하면 예상대로 일치 항목을 볼 수 있습니다.

$> echo -ne 'foo\nfoo\n' > file_a
$> grep -Hn foo file_a
file_a:1:foo
file_a:2:foo

하지만 캐리지 리턴이 포함된 파일을 생성하면 grep이 예상치 못한 출력을 표시합니다.

$> echo -ne '\x0dfoo\x0dfoo\nfoo\n' > file_b
$> grep -Hn foo file_b
fooe_b:1:
file_b:2:foo

왜 이 출력이 나오는지 설명할 수 있는 사람이 있나요?

답변1

이것은 놀라운 일이 아닙니다. Enter 키를 누르면 커서가 줄의 시작 부분으로 이동됩니다. 파일 이름과 줄 번호가 인쇄되었으며 일치하는 줄의 내용이 해당 줄을 덮어씁니다( grep줄의 첫 번째 앞과 뒤의 캐리지 리턴으로 인해).foo

캐리지 리턴 문자는 다음과 \r같이 쓸 수도 있습니다.

printf '\rfoo\rfoo\nfoo\n' >file

그러면 두 줄의 파일이 생성됩니다. 첫 번째 줄에는 단어가 foo두 번 포함되지만 캐리지 리턴을 사용하면 커서가 줄의 시작 부분으로 이동됩니다. 를 사용하여 이 파일을 보면 cat첫 번째 줄에 하나만 있는 것처럼 보입니다.foo

관련 정보