![파일에 캐리지 리턴이 포함된 경우 grep이 예기치 않은 출력을 인쇄하는 이유는 무엇입니까? [복사]](https://linux55.com/image/129586/%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%BA%90%EB%A6%AC%EC%A7%80%20%EB%A6%AC%ED%84%B4%EC%9D%B4%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EA%B2%BD%EC%9A%B0%20grep%EC%9D%B4%20%EC%98%88%EA%B8%B0%EC%B9%98%20%EC%95%8A%EC%9D%80%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EC%9D%B8%EC%87%84%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
이와 같이 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