Linux 줄 바꿈 필터링

LinuxBeginner
지금 연습하기

소개

Linux 시스템에서 텍스트 파일을 다룰 때, 일관성 없는 줄 바꿈 문제에 직면할 수 있습니다. 이러한 불일치는 Windows 와 Linux 와 같은 서로 다른 운영 체제 간에 파일이 전송될 때 자주 발생합니다.

이 랩에서는 Linux 의 줄 바꿈 문자 (line feed characters) 에 대해 배우고, 명령줄 도구를 사용하여 이를 적절하게 처리하는 방법을 익힐 것입니다. 운영 체제 간의 줄 바꿈 차이점을 이해하고, 텍스트 파일에서 줄 바꿈을 필터링하기 위한 col 명령어를 숙달하게 됩니다.

이 기본적인 기술은 혼합 환경에서 작업하는 시스템 관리자 및 개발자에게 필수적이며, 파일의 출처에 관계없이 텍스트 파일이 올바르게 처리되도록 돕습니다.

다양한 운영 체제에서의 줄 바꿈 이해

서로 다른 운영 체제는 텍스트 파일에서 줄의 끝을 나타내기 위해 서로 다른 문자를 사용합니다.

  • Linux/Unix: Line Feed (LF, \n) 사용
  • Windows: Carriage Return + Line Feed (CRLF, \r\n) 사용
  • Classic Mac OS: Carriage Return (CR, \r) 사용

서로 다른 시스템의 파일로 작업할 때, 이러한 변형은 텍스트 처리 도구에서 서식 문제 또는 예상치 못한 동작을 유발할 수 있습니다.

실험을 위해 디렉토리를 생성해 보겠습니다.

mkdir -p ~/project/line_feeds
cd ~/project/line_feeds

먼저, Unix 스타일의 줄 바꿈 (LF) 을 가진 간단한 텍스트 파일을 생성해 보겠습니다.

echo -e "This is line 1.\nThis is line 2.\nThis is line 3." > unix_file.txt

이제 Windows 스타일의 줄 바꿈 (CRLF) 을 가진 파일을 생성해 보겠습니다.

echo -e "This is line 1.\r\nThis is line 2.\r\nThis is line 3." > windows_file.txt

이 파일들의 차이점을 확인하기 위해, 인쇄되지 않는 문자를 표시하는 -v 옵션과 함께 cat 명령어를 사용할 수 있습니다.

cat -v unix_file.txt

다음과 같은 출력을 볼 수 있습니다.

This is line 1.
This is line 2.
This is line 3.

이제 Windows 스타일 파일을 확인해 보겠습니다.

cat -v windows_file.txt

다음과 같은 출력을 볼 수 있습니다.

This is line 1.^M
This is line 2.^M
This is line 3.

^M 문자는 Windows 줄 바꿈의 일부인 Carriage Return (\r) 을 나타냅니다. 이러한 문자는 Linux 에서 파일을 처리할 때 문제를 일으킬 수 있습니다.

줄 바꿈 필터링을 위한 col 명령어 소개

Linux 는 줄 바꿈 문제를 처리하기 위한 여러 도구를 제공합니다. 이러한 도구 중 하나는 col 명령어이며, 주로 역방향 줄 바꿈을 필터링하도록 설계되었지만 다른 특수 문자도 처리할 수 있습니다.

먼저 col 명령어의 기본 사용법을 이해해 보겠습니다.

man col | head -20

우리의 목적에 가장 유용한 col 옵션은 -b입니다. 이 옵션은 col에게 모든 백스페이스 문자와 백스페이스 문자가 덮어쓸 문자를 제거하도록 지시합니다. 이는 Windows 스타일의 줄 바꿈에서 볼 수 있는 Carriage Return (\r) 문자를 제거하는 데에도 유용합니다.

혼합된 줄 바꿈을 가진 파일을 생성하여 시연해 보겠습니다.

cd ~/project/line_feeds
cat > mixed_file.txt << EOF
This line has Unix endings.
This line has Windows endings.^M
Another Unix line.
Another Windows line.^M
EOF

참고: ^M 문자는 실제로 터미널에서 Ctrl+V 를 누른 다음 Ctrl+M 을 눌러 입력됩니다.

이제 이 파일을 검사해 보겠습니다.

cat -v mixed_file.txt

다음과 같은 출력을 볼 수 있습니다.

This line has Unix endings.
This line has Windows endings.^M
Another Unix line.
Another Windows line.^M

이제 col 명령어를 사용하여 이러한 줄 바꿈을 정리할 수 있습니다.

col -b < mixed_file.txt > cleaned_file.txt

결과를 확인해 보겠습니다.

cat -v cleaned_file.txt

이제 다음을 볼 수 있습니다.

This line has Unix endings.
This line has Windows endings.
Another Unix line.
Another Windows line.

^M 문자 (Carriage Return) 가 제거되어 Linux 텍스트 파일에 적합한 형식인 Line Feed 만 남았음을 알 수 있습니다.

실제 사례를 통한 실습

이제 우리가 배운 내용을 좀 더 현실적인 예시에 적용해 보겠습니다. 시스템 로그, 구성 파일 및 스크립트는 일관된 줄 바꿈을 보장하기 위해 종종 처리해야 합니다.

혼합된 줄 바꿈을 가진 샘플 로그 파일을 생성해 보겠습니다.

cd ~/project/line_feeds
cat > server_log.txt << EOF
[2023-05-15 08:00:01] Server started^M
[2023-05-15 08:05:23] User login: admin
[2023-05-15 08:10:45] Configuration updated^M
[2023-05-15 08:15:30] Backup process started
[2023-05-15 08:30:12] Backup completed^M
[2023-05-15 09:00:00] Scheduled maintenance started
EOF

이 파일을 검사해 보겠습니다.

cat -v server_log.txt

일부 줄의 끝에 Carriage Return 문자 (^M) 가 표시되어야 합니다.

[2023-05-15 08:00:01] Server started^M
[2023-05-15 08:05:23] User login: admin
[2023-05-15 08:10:45] Configuration updated^M
[2023-05-15 08:15:30] Backup process started
[2023-05-15 08:30:12] Backup completed^M
[2023-05-15 09:00:00] Scheduled maintenance started

이제 이 로그 파일을 정리해 보겠습니다.

col -b < server_log.txt > clean_server_log.txt

결과를 확인합니다.

cat -v clean_server_log.txt

출력은 Carriage Return 문자가 없어야 합니다.

[2023-05-15 08:00:01] Server started
[2023-05-15 08:05:23] User login: admin
[2023-05-15 08:10:45] Configuration updated
[2023-05-15 08:15:30] Backup process started
[2023-05-15 08:30:12] Backup completed
[2023-05-15 09:00:00] Scheduled maintenance started

또 다른 일반적인 예시인, 일관성 없는 줄 바꿈을 가진 스크립트 파일을 생성해 보겠습니다.

cd ~/project/line_feeds
cat > script.sh << EOF
#!/bin/bash^M
## This is a sample script^M
echo "Starting script..."^M
for i in {1..5}
do^M
    echo "Processing item $i"^M
done
echo "Script completed."
EOF

이 파일을 확인해 보겠습니다.

cat -v script.sh

다음과 같이 표시됩니다.

#!/bin/bash^M
## This is a sample script^M
echo "Starting script..."^M
for i in {1..5}
do^M
    echo "Processing item $i"^M
done
echo "Script completed."

이제 이 스크립트 파일을 정리합니다.

col -b < script.sh > clean_script.sh
chmod +x clean_script.sh

결과를 확인합니다.

cat -v clean_script.sh

이제 출력은 일관된 줄 바꿈을 표시해야 합니다.

#!/bin/bash
## This is a sample script
echo "Starting script..."
for i in {1..5}
do
    echo "Processing item $i"
done
echo "Script completed."

일관된 줄 바꿈을 갖는 것은 셸 스크립트에서 특히 중요합니다. 혼합된 줄 바꿈은 실행 오류를 유발할 수 있기 때문입니다.

줄 바꿈 처리의 대체 방법

col 명령어가 줄 바꿈 필터링에 유용하지만, Linux 는 다른 형식 간에 줄 바꿈을 변환하도록 특별히 설계된 다른 도구를 제공합니다. 이러한 대안 중 일부를 살펴보겠습니다.

dos2unixunix2dos 명령어 사용

dos2unixunix2dos 유틸리티는 DOS/Windows와 Unix 형식 간에 텍스트 파일을 변환하도록 특별히 설계되었습니다.

먼저, 이러한 유틸리티를 설치해 보겠습니다.

sudo apt update
sudo apt install -y dos2unix

이제 테스트할 또 다른 Windows 스타일 파일을 생성해 보겠습니다.

cd ~/project/line_feeds
cat > config.ini << EOF
[General]^M
Username=admin^M
Password=12345^M
Debug=true^M

[Network]^M
Host=127.0.0.1^M
Port=8080^M
Timeout=30^M
EOF

파일을 확인합니다.

cat -v config.ini

Carriage Return 문자 (^M) 가 표시되어야 합니다.

[General]^M
Username=admin^M
Password=12345^M
Debug=true^M

[Network]^M
Host=127.0.0.1^M
Port=8080^M
Timeout=30^M

이제 dos2unix를 사용하여 이 파일을 변환해 보겠습니다.

dos2unix config.ini

이 명령어는 파일을 제자리에서 수정합니다. 결과를 확인해 보겠습니다.

cat -v config.ini

Carriage Return 문자가 사라져야 합니다.

[General]
Username=admin
Password=12345
Debug=true

[Network]
Host=127.0.0.1
Port=8080
Timeout=30

tr 명령어 사용

또 다른 방법은 문자를 변환하거나 삭제할 수 있는 tr 명령어를 사용하는 것입니다.

cd ~/project/line_feeds
cat > tr_example.txt << EOF
This is a Windows-style file^M
with carriage returns^M
at the end of each line.^M
EOF

파일을 확인합니다.

cat -v tr_example.txt

다음과 같이 표시됩니다.

This is a Windows-style file^M
with carriage returns^M
at the end of each line.^M

이제 tr을 사용하여 Carriage Return 문자를 삭제합니다.

tr -d '\r' < tr_example.txt > tr_cleaned.txt

결과를 확인합니다.

cat -v tr_cleaned.txt

출력은 다음과 같아야 합니다.

This is a Windows-style file
with carriage returns
at the end of each line.

방법 비교

우리가 배운 방법들을 요약해 보겠습니다.

  1. col -b: Carriage Return 및 기타 특수 문자를 필터링하는 데 적합합니다.
  2. dos2unix: Windows/DOS 텍스트 파일을 Unix 형식으로 변환하도록 특별히 설계되었습니다.
  3. tr -d '\r': 문자 변환을 사용하는 간단한 접근 방식입니다.

각 방법에는 장점이 있습니다.

  • col은 다재다능하며 다양한 특수 문자를 처리합니다.
  • dos2unix는 줄 바꿈 변환을 위해 특별히 제작되었습니다.
  • tr은 거의 모든 Unix 시스템에서 사용할 수 있는 간단한 솔루션입니다.

대부분의 줄 바꿈 변환 작업의 경우 dos2unix가 가장 간단한 도구입니다. 그러나 이러한 모든 방법을 알고 있으면 다양한 시스템에서 작업할 때 유연성을 얻을 수 있습니다.

요약

이 Lab 에서 Linux 에서 줄 바꿈 필터링에 대해 배우고 다양한 줄 바꿈 형식을 처리하는 방법을 배웠습니다.

  1. 다양한 운영 체제에서 사용되는 서로 다른 줄 바꿈 규칙에 대해 배웠습니다.

    • Linux/Unix: Line Feed (LF, \n)
    • Windows: Carriage Return + Line Feed (CRLF, \r\n)
    • Classic Mac OS: Carriage Return (CR, \r)
  2. cat -v와 같은 도구를 사용하여 서로 다른 줄 바꿈을 가진 파일을 생성하고 검사하는 연습을 했습니다.

  3. Carriage Return 및 기타 특수 문자를 필터링하기 위해 -b 옵션과 함께 col 명령어를 사용하는 방법을 배웠습니다.

  4. 이 지식을 로그 파일 및 셸 스크립트와 같은 실제 예시에 적용했습니다.

  5. 다음을 포함하여 줄 바꿈을 처리하기 위한 대체 방법을 탐색했습니다.

    • Windows/DOS 텍스트 파일을 Unix 형식으로 변환하기 위한 dos2unix 유틸리티
    • 특정 문자를 변환하거나 삭제하기 위한 tr 명령어

이러한 기술은 파일이 서로 다른 운영 체제에서 생성될 수 있는 혼합 환경에서 작업하는 시스템 관리자 및 개발자에게 필수적입니다. 줄 바꿈을 적절하게 처리하면 호환성을 보장하고 텍스트 처리 작업에서 예기치 않은 동작을 방지할 수 있습니다.