Linux 문자 변환

LinuxBeginner
지금 연습하기

소개

tr 명령어는 Linux 에서 표준 입력을 통해 문자를 변환, 삭제, 압축할 수 있는 강력한 텍스트 조작 도구입니다. 대소문자 변환, 특정 문자 제거, 텍스트 파일의 서식 표준화와 같은 작업에 특히 유용합니다.

이 Lab 에서는 다양한 텍스트 조작 작업에 tr 명령어를 사용하는 방법을 배우게 됩니다. 문자 집합 간의 변환, 원치 않는 문자 삭제, 반복되는 문자 압축의 세 가지 주요 기능을 살펴볼 것입니다. 이러한 기술은 Linux 환경에서 효율적인 텍스트 처리 및 데이터 정리에 필수적입니다.

이 Lab 을 마치면 요구 사항에 따라 텍스트 데이터를 자신 있게 변환하기 위해 tr 명령어를 사용할 수 있게 되어 텍스트 처리 작업을 더욱 효율적이고 정확하게 만들 수 있습니다.

기본 tr 명령어 이해

Linux 의 tr 명령어는 표준 입력을 통해 문자를 변환, 삭제 또는 압축하여 결과를 표준 출력에 쓰는 데 사용됩니다. 이 단계에서는 tr 명령어의 기본 구문과 소문자를 대문자로 변환하는 방법을 배우게 됩니다.

tr 의 기본 구문

tr 명령어의 기본 구문은 다음과 같습니다.

tr [OPTION]... SET1 [SET2]

여기서:

  • SET1은 변환 또는 삭제할 문자 집합입니다.
  • SET2SET1의 문자를 대체할 문자 집합입니다.

샘플 텍스트 파일 생성

실습을 위해 샘플 텍스트 파일을 만들어 보겠습니다. LabEx VM 에서 터미널을 열고 다음 명령을 실행합니다.

echo 'industrial revolution' > ~/project/sample.txt

이 명령은 /home/labex/project 디렉토리에 "industrial revolution" 텍스트가 포함된 sample.txt라는 새 파일을 생성합니다.

소문자를 대문자로 변환

이제 tr 명령어를 사용하여 모든 소문자를 대문자로 변환해 보겠습니다.

tr 'a-z' 'A-Z' < ~/project/sample.txt

이 명령을 실행하면 다음과 같은 출력이 표시됩니다.

INDUSTRIAL REVOLUTION

명령어 이해

무슨 일이 일어났는지 자세히 살펴보겠습니다.

  • tr 'a-z' 'A-Z'는 각 소문자 (a-z) 를 해당 대문자 (A-Z) 로 바꾸도록 명령합니다.
  • < 기호는 ~/project/sample.txt의 내용을 tr 명령어의 입력으로 리디렉션합니다.
  • 결과는 터미널에 표시되지만 파일에는 저장되지 않습니다.

출력을 새 파일에 저장

변환된 텍스트를 새 파일에 저장하려면 출력 리디렉션을 사용할 수 있습니다.

tr 'a-z' 'A-Z' < ~/project/sample.txt > ~/project/uppercase_sample.txt

새 파일의 내용을 확인하려면 cat 명령어를 사용합니다.

cat ~/project/uppercase_sample.txt

다음과 같은 내용이 표시됩니다.

INDUSTRIAL REVOLUTION

이제 텍스트를 소문자에서 대문자로 변환하기 위해 tr 명령어의 기본 기능을 성공적으로 사용하는 방법을 배웠습니다.

tr 명령어를 사용한 문자 삭제

tr 명령어의 강력한 기능 중 하나는 텍스트에서 특정 문자를 삭제하는 기능입니다. 이 기능은 데이터 파일을 정리하거나 텍스트 스트림에서 원치 않는 문자를 제거할 때 특히 유용합니다.

tr 의 삭제 옵션

tr 명령어를 사용하여 문자를 삭제하려면 -d 옵션 뒤에 제거하려는 문자 집합을 사용합니다.

tr -d SET1

여기서 SET1은 삭제하려는 문자 집합입니다.

숫자가 포함된 샘플 텍스트 파일 생성

실습에 사용할 숫자가 포함된 텍스트가 있는 샘플 파일을 만들어 보겠습니다.

echo 'Factory 1 Output: 100 units, Factory 2 Output: 150 units' > ~/project/factory_output.txt

이 명령은 /home/labex/project 디렉토리에 숫자를 포함하는 텍스트가 있는 factory_output.txt라는 파일을 생성합니다.

텍스트에서 숫자 제거

이제 -d 옵션과 함께 tr 명령어를 사용하여 텍스트에서 모든 숫자를 제거해 보겠습니다.

tr -d '0-9' < ~/project/factory_output.txt

이 명령을 실행하면 다음과 같은 출력이 표시됩니다.

Factory  Output:  units, Factory  Output:  units

모든 숫자 (1, 2, 100, 150) 가 텍스트에서 제거되었음을 알 수 있습니다.

명령어 이해

무슨 일이 일어났는지 자세히 살펴보겠습니다.

  • tr -d '0-9'는 0-9 범위의 모든 문자 (모든 숫자) 를 삭제하도록 명령합니다.
  • < 기호는 ~/project/factory_output.txt의 내용을 tr 명령어의 입력으로 리디렉션합니다.
  • 결과는 터미널에 표시되지만 파일에는 저장되지 않습니다.

출력을 새 파일에 저장

숫자가 없는 출력을 새 파일에 저장하려면 출력 리디렉션을 사용할 수 있습니다.

tr -d '0-9' < ~/project/factory_output.txt > ~/project/no_digits_output.txt

새 파일의 내용을 확인하려면 cat 명령어를 사용합니다.

cat ~/project/no_digits_output.txt

다음과 같은 내용이 표시됩니다.

Factory  Output:  units, Factory  Output:  units

여러 문자 집합 삭제

단일 명령으로 여러 유형의 문자를 삭제할 수도 있습니다. 예를 들어 숫자와 구두점을 모두 삭제해 보겠습니다.

tr -d '0-9:,;' < ~/project/factory_output.txt

이렇게 하면 텍스트에서 모든 숫자 (0-9) 와 콜론, 쉼표, 세미콜론이 제거됩니다.

이제 Linux 에서 데이터 정리 및 텍스트 처리에 유용한 기술인 tr 명령어를 사용하여 텍스트에서 특정 문자를 삭제하는 방법을 알게 되었습니다.

tr 명령어를 사용한 문자 압축

tr 명령어의 또 다른 유용한 기능은 반복되는 문자를 "압축"하여 동일한 문자가 연속으로 나타나는 경우 단일 인스턴스로 바꾸는 기능입니다. 이 기능은 과도한 공백이나 기타 반복되는 문자가 포함된 텍스트를 처리할 때 특히 유용합니다.

tr 의 압축 옵션

tr 명령어를 사용하여 반복되는 문자를 압축하려면 -s 옵션 뒤에 압축하려는 문자 집합을 사용합니다.

tr -s SET1

여기서 SET1은 압축하려는 문자 집합입니다.

과도한 공백이 있는 샘플 텍스트 파일 생성

실습에 사용할 과도한 공백이 있는 샘플 파일을 만들어 보겠습니다.

echo 'Error:    Too much    whitespace.' > ~/project/whitespace.txt

이 명령은 /home/labex/project 디렉토리에 여러 개의 연속된 공백이 포함된 텍스트가 있는 whitespace.txt라는 파일을 생성합니다.

텍스트에서 공백 압축

이제 -s 옵션과 함께 tr 명령어를 사용하여 여러 개의 공백을 단일 공백으로 압축해 보겠습니다.

tr -s ' ' < ~/project/whitespace.txt

이 명령을 실행하면 다음과 같은 출력이 표시됩니다.

Error: Too much whitespace.

단어 사이의 여러 공백이 단일 공백으로 줄어들어 텍스트를 더 읽기 쉽게 만들었음을 알 수 있습니다.

명령어 이해

무슨 일이 일어났는지 자세히 살펴보겠습니다.

  • tr -s ' '는 공백 문자가 반복적으로 나타나는 경우 단일 공백으로 압축하도록 명령합니다.
  • < 기호는 ~/project/whitespace.txt의 내용을 tr 명령어의 입력으로 리디렉션합니다.
  • 결과는 터미널에 표시되지만 파일에는 저장되지 않습니다.

출력을 새 파일에 저장

압축된 공백이 있는 텍스트를 새 파일에 저장하려면 출력 리디렉션을 사용할 수 있습니다.

tr -s ' ' < ~/project/whitespace.txt > ~/project/clean_whitespace.txt

새 파일의 내용을 확인하려면 cat 명령어를 사용합니다.

cat ~/project/clean_whitespace.txt

다음과 같은 내용이 표시됩니다.

Error: Too much whitespace.

tr 작업 결합

tr 명령어를 사용하면 작업을 결합할 수 있습니다. 예를 들어, 문자를 변환하고 압축하는 작업을 단일 명령으로 수행할 수 있습니다.

tr 'a-z' 'A-Z' -s ' ' < ~/project/whitespace.txt

이 명령은 모든 소문자를 대문자로 변환하고 여러 개의 공백을 단일 공백으로 압축합니다.

더 복잡한 예제 생성

실습을 위해 더 복잡한 예제를 만들어 보겠습니다.

echo 'log     entry:   error   code  404   not     found' > ~/project/complex.txt

이제 tr을 사용하여 모든 문자를 대문자로 변환하고 공백을 압축해 보겠습니다.

tr 'a-z' 'A-Z' -s ' ' < ~/project/complex.txt > ~/project/processed_complex.txt

결과를 보려면:

cat ~/project/processed_complex.txt

다음과 같은 내용이 표시됩니다.

LOG ENTRY: ERROR CODE 404 NOT FOUND

이제 텍스트에서 반복되는 문자를 압축하기 위해 tr 명령어를 사용하는 방법을 배웠습니다. 이는 이전에 배운 변환 및 삭제 기능과 결합하여 Linux 에서 텍스트 조작을 위한 강력한 도구 상자를 제공합니다.

고급 텍스트 변환을 위한 tr 명령어 조합

이 단계에서는 여러 tr 작업을 결합하여 보다 고급 텍스트 변환을 수행하는 방법을 배우게 됩니다. 다양한 작업을 함께 연결하는 기능은 tr을 복잡한 텍스트 처리 작업에 유용한 도구로 만듭니다.

샘플 데이터 파일 생성

대문자 및 소문자, 숫자 및 특수 문자가 혼합된 샘플 데이터 파일을 만들어 보겠습니다.

echo 'User123: John_Doe@example.com - Last Login: 2023-10-15' > ~/project/user_data.txt

이 명령은 /home/labex/project 디렉토리에 샘플 사용자 레코드가 있는 user_data.txt라는 새 파일을 생성합니다.

파이프를 사용한 여러 작업

여러 변환을 수행하는 한 가지 방법은 파이프를 사용하여 tr 명령어를 함께 연결하는 것입니다.

cat ~/project/user_data.txt | tr 'A-Z' 'a-z' | tr -d '0-9' | tr -s ' '

이 명령어는 다음을 수행합니다.

  1. 모든 대문자를 소문자로 변환합니다.
  2. 모든 숫자를 삭제합니다.
  3. 연속된 공백을 단일 공백으로 압축합니다.

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

user: john_doe@example.com - last login: --

확장 문자 클래스와 함께 tr 사용

tr 명령어는 변환을 더 간결하게 만들 수 있는 특정 특수 문자 클래스를 지원합니다. 몇 가지 일반적인 문자 클래스는 다음과 같습니다.

  • [:alnum:] - 모든 문자와 숫자
  • [:alpha:] - 모든 문자
  • [:digit:] - 모든 숫자
  • [:lower:] - 모든 소문자
  • [:upper:] - 모든 대문자
  • [:space:] - 모든 공백 문자

이러한 문자 클래스를 사용하여 사용자 데이터를 변환해 보겠습니다.

tr '[:upper:]' '[:lower:]' < ~/project/user_data.txt > ~/project/lowercase_user_data.txt

이 명령어는 모든 대문자를 소문자로 변환하고 결과를 새 파일에 저장합니다.

새 파일의 내용을 확인하려면:

cat ~/project/lowercase_user_data.txt

다음과 같은 내용이 표시됩니다.

user123: john_doe@example.com - last login: 2023-10-15

포괄적인 예제 생성

실습을 위해 더 복잡한 파일을 만들어 보겠습니다.

echo '  LOG   ENTRY:  Error-404   Page    Not    Found   (HTTP)  ' > ~/project/log_entry.txt

이제 여러 변환을 한 번에 수행해 보겠습니다.

cat ~/project/log_entry.txt | tr '[:upper:]' '[:lower:]' | tr -d '-()' | tr -s ' ' > ~/project/transformed_log.txt

이 명령어는 다음을 수행합니다.

  1. 모든 대문자를 소문자로 변환합니다.
  2. 하이픈, 괄호 및 대괄호를 삭제합니다.
  3. 연속된 공백을 단일 공백으로 압축합니다.

결과를 보려면:

cat ~/project/transformed_log.txt

다음과 같은 내용이 표시됩니다.

 log entry: error404 page not found http

선행 및 후행 공백이 아직 남아 있음을 알 수 있습니다. 이를 제거하려면 이 랩의 범위를 벗어나는 sed 또는 awk와 같은 추가 도구가 필요합니다.

이제 여러 tr 작업을 결합하여 복잡한 텍스트 변환을 수행하는 방법을 알게 되었으며, 이를 통해 텍스트 처리 작업을 보다 효율적이고 효과적으로 만들 수 있습니다.

요약

이 랩에서는 Linux 에서 텍스트 조작을 위한 다재다능한 도구인 tr 명령어를 사용하는 방법을 배웠습니다. 다음 세 가지 주요 기능을 살펴보았습니다.

  1. 문자 변환 (Character Translation): 소문자를 대문자로 변환하는 등 한 세트의 문자를 다른 세트로 변환하는 방법을 배웠습니다. 이 기능은 텍스트 형식을 표준화하고 데이터를 정규화하는 데 유용합니다.

  2. 문자 삭제 (Character Deletion): -d 옵션을 사용하여 텍스트에서 특정 문자를 제거하는 방법을 배웠습니다. 이 기능은 원치 않는 문자를 제거하여 데이터를 정리하는 데 특히 유용합니다.

  3. 문자 압축 (Character Squeezing): -s 옵션을 사용하여 반복되는 문자를 단일 인스턴스로 압축하는 방법을 살펴보았습니다. 이 기능은 과도한 공백이 포함된 텍스트를 처리하는 데 특히 유용합니다.

  4. 작업 결합 (Combining Operations): 여러 tr 작업을 결합하여 복잡한 텍스트 변환을 효율적으로 수행하는 방법을 배웠습니다.

이러한 기술은 Linux 환경에서 텍스트 처리를 위한 견고한 기반을 제공합니다. tr 명령어는 강력한 도구이며, grep, sed, awk와 같은 다른 Linux 명령어와 결합하면 다양한 데이터 처리 작업에 대한 정교한 텍스트 조작을 가능하게 합니다.

tr 명령어를 마스터함으로써 미래 프로젝트에서 텍스트 데이터를 보다 효율적이고 정확하게 처리하는 데 도움이 되는 필수 도구를 Linux 도구 상자에 추가했습니다.