Linux에서 fold 명령을 사용하는 방법

리눅스 `fold` 명령어는 예측하기 어려운 결과를 초래할 수 있습니다. 출력 폭을 조절하여 긴 텍스트 뭉치, 끝없이 이어지는 문자열, 정돈되지 않은 스트림을 효과적으로 관리할 수 있습니다. 이 기능을 활용하는 방법을 자세히 알아보겠습니다.

리눅스 터미널에서 텍스트 줄의 작동 방식

리눅스 운영체제 사용의 기본 규칙 중 하나는 적을 이해하는 것입니다. 여기서 ‘적’이란 텍스트 줄을 의미합니다. 텍스트 한 줄은 정확히 무엇일까요? 문자, 숫자, 기호 및 공백 등의 문자 시퀀스로 구성되어 있으며, “새 줄 시작”을 나타내는 특수한 바이트로 끝납니다. 리눅스와 유닉스 시스템에서는 개행 문자 또는 줄바꿈이라고 하는 것이 줄의 끝을 표시하는 데 사용됩니다. 이는 16진수 값으로 0x0a, 10진수로는 10에 해당하는 바이트입니다.

다른 운영체제는 줄의 끝을 나타내는 데 다른 바이트 값을 사용합니다. 윈도우는 2바이트 시퀀스를 사용합니다. 윈도우 텍스트 파일에서는 줄 바꿈 문자 바로 뒤에 캐리지 리턴 문자가 추가되며, 이는 16진수로 0x0d이고 10진수로 13입니다.

“줄 바꿈” 및 “캐리지 리턴”이라는 용어는 타자기 시대에서 유래되었습니다. 플래튼, 즉 종이를 감싸는 실린더는 이동 가능한 마차에 장착되어 있었습니다. 키를 누를 때마다 마차는 왼쪽으로 문자 하나 너비만큼 이동했습니다. 새로운 줄을 시작하려면 마차를 원래 위치로 되돌리고, 롤러를 회전시켜 용지를 한 줄 높이만큼 올리는 레버를 눌러야 했습니다. 이 동작을 캐리지 리턴이라 부르고, 실린더의 회전(및 용지 이동)을 줄 바꿈이라 칭했습니다.

타자기가 전동화되면서 레버는 키로 대체되었습니다. 이 키에는 Carriage Return 또는 간단히 Return으로 표시되었습니다. 초기 컴퓨터 중 일부인 BBC Micro와 같은 기기들은 현재 우리가 Enter 키라고 부르는 것에 여전히 Return이라는 이름을 사용했습니다.

일반적으로 줄 바꿈 문자는 눈에 보이지 않습니다. 우리는 그 효과만을 확인할 수 있습니다. 줄 바꿈 문자는 텍스트를 표시하거나 처리하는 소프트웨어가 다음 줄에서 시작하도록 지시합니다.

긴 줄이 문제가 되는 이유는 무엇일까요?

줄 바꿈 문자가 없거나 거의 없는 텍스트는 너무 넓어서 터미널 창에서 편안하게 읽을 수 없습니다. 불편하지만 이는 해결 가능한 문제입니다.

더 큰 문제는 텍스트를 처리, 전송 또는 수신해야 하는 소프트웨어가 너무 긴 줄을 다루는 데 어려움을 겪을 수 있다는 점입니다. 이는 소프트웨어 내부 버퍼의 제한이나 기타 조정 불가능한 요소로 인해 발생할 수 있습니다.

이러한 문제를 해결하는 방법이 바로 “접기(folding)”입니다.

접기 기능 사용법

매우 긴 줄을 포함한 텍스트를 살펴보겠습니다. 여기서 우리는 문장이 아닌 텍스트 줄에 대해 이야기하고 있습니다. 이 예시는 허먼 멜빌의 “모비 딕”에서 가져왔으므로 두 가지 세계의 장점을 모두 볼 수 있습니다.

텍스트 줄은 마지막 줄 바꿈 문자(또는 파일의 첫 번째 줄인 경우 파일의 시작 부분)부터 다음 줄 바꿈 문자 사이의 모든 내용입니다. 한 줄에 여러 문장이 포함될 수 있습니다. 터미널 창에서 여러 줄에 걸쳐 표시될 수도 있습니다. 그러나 여전히 하나의 텍스트 줄입니다.

원시 형식의 텍스트를 살펴봅시다.

less moby-dick.txt

less 명령어를 사용하여 텍스트를 표시합니다.

텍스트가 창의 한쪽 끝에서 다른 쪽 끝까지 이어져 있으며 줄 바꿈이 보기 좋지 않고 단어 중간에 끊어져 있습니다.

이제 짧은 줄을 가진 다른 버전의 파일을 살펴보겠습니다.

less short-lines-moby-dick.txt

이 파일의 줄은 훨씬 짧습니다. 각 줄은 줄 바꿈 문자로 끝납니다.

파일 내의 바이트 값을 확인하기 위해 `hexdump` 명령어를 사용하면 개행 문자를 찾을 수 있습니다. `-C` (표준) 옵션은 16진수 값을 기본 형식으로 출력하도록 지정합니다.