Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

Linux tr 명령어 완벽 가이드 – 정의부터 실전 사용법까지

tr(translate) 명령어는 Linux에서 표준 입력(standard input)으로부터 텍스트를 읽어 들여, 지정된 방식대로 변환한 뒤 표준 출력(standard output)으로 내보내는 도구입니다. 이 글에서는 tr 명령어가 무엇인지, 어떤 상황에서 그리고 어떻게 사용하는지 예제와 함께 자세히 살펴봅니다.

tr 명령어 기본 문법

tr 명령어를 사용할 때의 기본 문법은 다음과 같습니다.

tr OPTIONS SET1 [SET2]

각 구성 요소를 살펴보면 다음과 같습니다.

  • OPTIONS: 아래 표에 정리된 옵션 목록을 지정합니다.
  • SET1의 문자는 SET2에서 같은 위치에 있는 문자로 치환됩니다.
    • SET은 선택 사항입니다. 일부 옵션은 SET 없이도 변환 작업을 수행할 수 있으므로, 두 SET이 모두 필요한 것은 아닙니다.
  • 처리할 텍스트가 명령어에 직접 포함되지 않는다는 점에 유의하세요. 텍스트는 파이프(pipe) 또는 리디렉션(redirection)을 통해 표준 입력으로 전달해야 합니다. 자세한 내용은 아래 예제에서 확인할 수 있습니다.

주요 옵션(OPTIONS)

옵션설명
-cSET1의 여집합(complement)을 사용합니다.
-dSET1에 해당하는 문자를 삭제합니다(치환하지 않음).
-s마지막으로 지정한 SET에 나열된 문자가 연속해서 반복될 경우, 하나의 문자로 압축합니다.
-t먼저 SET1을 SET2의 길이에 맞게 잘라냅니다(truncate).

특수 문자 표기 시퀀스

SET 안에서 줄바꿈이나 탭 같은 특수 문자를 다루려면 아래 시퀀스를 사용할 수 있습니다.

시퀀스의미
\NNN8진수 값 NNN(1~3자리)에 해당하는 문자
\\백슬래시(\)
\b백스페이스
\n줄바꿈(new line)
\r캐리지 리턴(return)
\t수평 탭(horizontal tab)
[:alnum:]모든 영문자와 숫자
[:alpha:]모든 영문자
[:blank:]모든 수평 공백 문자
[:digit:]모든 숫자
[:lower:]모든 소문자
[:space:]모든 수평·수직 공백 문자
[:upper:]모든 대문자

위에는 자주 쓰이는 옵션과 시퀀스만 정리했습니다(실제로는 더 많은 항목이 있습니다). 전체 옵션 목록은 아래 명령어로 열 수 있는 사용자 매뉴얼에서 확인할 수 있습니다.

man tr

tr 명령어 사용 예제

다음은 tr 명령어의 대표적인 활용 예제입니다. 이 예제들은 조합하거나 응용하여 원하는 결과를 얻을 수 있습니다.

문자 삭제하기

아래 예제는 문자열에서 지정한 문자를 제거합니다. echo 명령어의 출력이 파이프(|)를 통해 tr 명령어로 전달됩니다.

tr 명령어는 반드시 파이핑 또는 리디렉션을 통해 표준 입력으로 텍스트를 전달받아야 한다는 점을 기억하세요.

echo "axbxcxdx" | tr -d 'x'

-d 옵션은 echo 명령어의 출력에서 문자 x를 모두 삭제하도록 tr에 지시합니다. 실행 결과는 다음과 같습니다.

abcd

소문자를 대문자로 변환하기

아래 예제는 [:lower:]와 [:upper:] 시퀀스를 이용해 모든 소문자를 대문자로 바꿉니다.

echo "aBcDeFg" | tr '[:lower:]' '[:upper:]'

실행 결과:

ABCDEFG

문자 치환하기

tr 명령어는 문자열 내의 문자를 치환할 때 가장 널리 사용됩니다. 예를 들어 공백을 하이픈(-)으로 바꾸는 경우입니다.

echo "frogs and fish" | tr '[:blank:]' '-'

실행 결과:

frogs-and-fish

이 예제에서는 두 개의 SET이 사용되었습니다. 첫 번째 SET은 공백·탭 같은 공백 문자([:blank:])를, 두 번째 SET은 하이픈을 담고 있으므로 공백이 하이픈으로 치환됩니다(SET2가 SET1을 대체).

웹사이트에 파일을 업로드할 때 파일명에 공백이 포함되지 않도록 처리해야 하는 상황 등에서 특히 유용하게 활용할 수 있습니다.

여러 문자 동시에 치환하기

앞선 예제에서는 각 SET에 문자가 하나씩만 있었지만, 여러 문자를 지정하면 한 번에 여러 개를 치환할 수 있습니다.

echo "frogs and fish" | tr 'sf' 'SF'

실행 결과:

FrogS and FiSh

첫 번째 SET의 각 문자가 두 번째 SET에서 같은 위치에 있는 문자로 바뀐 것을 확인할 수 있습니다.

반복 문자 제거하기

아래 예제는 텍스트에서 불필요하게 반복되는 공백을 제거합니다.

echo 'Absolutely spaced                out' | tr -s '[:space:]'

실행 결과:

Absolutely spaced out

-s 옵션과 [:space:] 식별자를 함께 사용하여 연속으로 반복되는 공백을 찾아 하나로 압축했습니다.