리눅스(Linux)와 유닉스(Unix) 시스템에서 tr은 문자를 변환하고, 삭제하며, 반복되는 문자를 압축(squeeze)하는 강력한 명령줄 유틸리티입니다. 사실 tr이라는 이름 자체가 'translate'의 줄임말입니다. 이 가이드에서는 다양한 예제를 통해 리눅스에서 tr 명령어를 사용하는 방법을 자세히 살펴봅니다.
tr 명령어는 반복 문자 제거, 소문자를 대문자로 변환, 문자 치환 및 삭제 같은 작업에 널리 활용되며, 파이프(|)를 통해 다른 명령어들과 조합하여 자주 사용됩니다.
참고로 리눅스는 안드로이드를 비롯해 우리가 일상적으로 사용하는 수많은 기술의 기반이 되는 오픈소스 커널이자 운영체제의 핵심으로, 누구나 자유롭게 설정하고 활용할 수 있다는 큰 장점이 있습니다.
tr 명령어 사용 방법
tr 명령어의 기본 문법은 다음과 같습니다. 여기서 SET1의 문자들이 SET2의 해당 문자로 변환됩니다:
tr OPTION... SET1 [SET2]
tr 명령어는 두 개의 문자 집합(일반적으로 길이가 동일함)을 받아, 첫 번째 집합의 문자를 두 번째 집합의 같은 위치에 있는 문자로 교체합니다. 이때 SET은 문자열을 의미하며, 백슬래시로 이스케이프된 특수 문자도 포함됩니다.
tr 명령어 주요 예제
1. 문자 범위 지정하기
문자 클래스 대신 범위(range)를 사용할 수도 있습니다:
echo 'hello' | tr 'a-z' 'A-Z'
반대로 대문자를 소문자로 변환하려면 두 집합의 순서만 바꿔주면 됩니다.
2. 대소문자 변환하기
대문자를 소문자로, 또는 그 반대로 변환하는 것은 tr 명령어의 가장 흔한 활용 사례 중 하나입니다.
[:lower:]는 모든 소문자를, [:upper:]는 모든 대문자를 의미합니다.
echo 'Hello' | tr '[:lower:]' '[:upper:]' HELLO
3. 빈 줄 제거하기
빈 줄을 삭제하려면 반복되는 개행 문자를 '압축(squeeze)'해야 합니다:
tr -s '\n' < input.txt > output.txt
위 예제에서는 리디렉션 기호를 사용하여 명령어의 출력 결과를 output.txt 파일에 저장합니다.
4. 숫자가 아닌 문자 모두 삭제하기
다음 명령어는 숫자가 아닌 모든 문자를 삭제합니다:
echo "The account number is 10879358" | tr -cd [:digit:]
[:digit:]는 모든 숫자 문자를 의미합니다. -c(보수, complement) 옵션을 함께 사용하면 숫자가 아닌 문자들이 제거됩니다. 실행 결과는 다음과 같습니다:
10879358
5. $PATH 디렉터리를 한 줄씩 출력하기
$PATH 환경 변수는 셸이 명령어 입력 시 실행 파일을 검색할 디렉터리 목록(콜론으로 구분)을 담고 있습니다. 각 디렉터리를 별도의 줄로 출력하려면 콜론(:)을 개행 문자로 변환하면 됩니다:
echo $PATH | tr ':' '\n' /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin
6. 단어별로 한 줄씩 출력하기
영숫자(alphanumeric)가 아닌 모든 문자를 찾아 개행 문자로 변환하면 됩니다:
echo 'Linux is the best operating system in the world' | tr -cs '[:alnum:]'
실행 결과:
Linux is the best operating system in the world
7. 문자 치환하기
표준 입력의 문자('coding')를 두 번째 집합의 해당 문자로 교체할 수 있습니다:
echo 'coding' | tr 'co' 'hi'
"c"는 "h"로, "o"는 "i"로 각각 치환되어 다음과 같은 결과가 나옵니다:
hiding
문자 집합은 문자 범위를 사용해서도 정의할 수 있습니다. 예를 들어 아래처럼 일일이 작성하는 대신,
echo 'coding' | tr 'abcd' 'wxyz'
범위 표기를 활용하면 더 간결하게 작성할 수 있습니다:
echo 'coding' | tr 'a-d' 'w-z' yozing
-c 옵션을 사용하면 tr은 SET1에 포함되지 않는 모든 문자를 대상으로 동작합니다.
다음 예제에서는 두 번째 집합의 마지막 문자를 기준으로, 지정되지 않은 나머지 모든 문자가 치환됩니다:
$ echo 'coding' | tr -c 'cod' 'xy' liyyyiyyy
자주 사용하는 옵션 정리
-n 옵션을 사용하면 개행 문자 없이 문자열을 출력할 수 있습니다.
-d 옵션은 SET1에 지정된 문자를 삭제하도록 tr에게 지시합니다. 압축(squeeze) 없이 삭제만 수행하려면 집합을 하나만 지정하면 됩니다.
아래 명령어는 l, i, z 문자를 삭제합니다:
echo 'Linuxize' | tr -d 'liz'