SW/리눅스

Linux : Tr 사용 방법, 예제, 명령어

얇은생각 2021. 10. 11. 07:30
반응형

tr은 리눅스 및 유닉스 시스템의 명령줄 유틸리티로, 표준 입력에서 문자를 변환, 삭제 및 압축하고 결과를 표준 출력에 씁니다. 

tr 명령은 반복되는 문자 제거, 대문자 소문자로 변환, 기본 문자 바꾸기 및 제거와 같은 작업을 수행할 수 있습니다. 일반적으로 배관을 통해 다른 명령과 함께 사용됩니다.

가장 일반적인 옵션에 대한 실제 예와 자세한 설명을 통해 명령 사용 방법을 보여 드리겠습니다.

 

 

Linux : Tr 사용 방법, 예제, 명령어

 

 

tr 명령 사용 방법

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

tr OPTION... SET1 [SET2]

 

 

tr은 일반적으로 길이가 동일한 두 문자 집합을 허용하며 첫 번째 세트의 문자를 두 번째 세트의 해당 문자로 대체합니다.

SET는 기본적으로 특수 백슬래시 이스케이프 문자를 포함한 일련의 문자입니다.

다음 예에서 tr은 첫 번째 세트의 문자와 두 번째 세트의 일치하는 문자를 매핑하여 표준 입력(리눅스 크기 조정)의 모든 문자를 바꿉니다.

이 발생할 때마다 r, i는 e로, n은 d로 바뀝니다.

echo 'linuxize' | tr 'lin' 'red'

# reduxeze

 

 

문자 세트는 문자 범위를 사용하여 정의할 수도 있습니다. 예를 들어 다음과 같이 쓰는 대신 다음을 사용합니다.

echo 'linuxize' | tr 'lmno' 'wxyz'

 

 

다음을 사용할 수 있습니다.

echo 'linuxize' | tr 'l-n' 'w-z'

 

 

-c(--complete) 옵션을 사용하면 tr이 SET1에 없는 모든 문자를 대체합니다.

아래 예에서는 "li"를 제외한 모든 문자가 두 번째 세트의 마지막 문자로 바뀝니다.

echo 'linuxize' | tr -c 'li' 'xy'

# liyyyiyyy

 

 

아시다시피 위의 출력에는 입력보다 한 가지 더 많은 가시 문자가 있습니다. 이는 echo 명령이 보이지 않는 새 줄 문자 \n도 y로 대체되기 때문입니다. 새 줄 없이 문자열을 반향하려면 -n 옵션을 사용합니다. 

-d(--delete) 옵션은 tr에게 SET1에 지정된 문자를 삭제하도록 지시합니다. 압축하지 않고 문자를 삭제할 때는 한 세트만 지정합니다.

아래 명령을 실행하면 l, i 및 z 문자가 제거됩니다.

echo 'Linuxize' | tr -d 'liz'

 

 

입력에 대문자 L이 포함되어 있지만 SET의 l 문자는 소문자이므로 L 문자는 삭제되지 않습니다.

Lnuxe

 

 

-s(--squeeze-repeats) 옵션은 반복 발생 시퀀스를 마지막 SET에 설정된 문자로 대체합니다. 

다음 예에서는 tr이 반복되는 공백 문자를 제거합니다.

echo "GNU     \    Linux" | tr -s ' '

# GNU \ Linux

 

 

SET2를 사용하면 SET1에 지정된 문자의 시퀀스가 SET2로 바뀝니다.

echo "GNU     \    Linux" | tr -s ' ' '_'

# GNU_\_Linux

 

 

 -t(--truncate-set1) 옵션은 추가 처리를 수행하기 전에 강제로 SET1을 SET2 길이로 자르도록 합니다.

기본적으로 SET1이 SET2보다 크면 SET2의 마지막 문자가 재사용됩니다. 다음은 예입니다.

echo 'Linux ize' | tr 'abcde' '12'

 

 

출력에 SET1의 문자가 SET2의 최신 문자인 2와 일치하는 것으로 나타납니다.

Linux iz2

 

 

이제 -t 옵션과 동일한 명령을 사용합니다.

echo 'Linux ize' | tr -t 'abcde' '12'

# Linux ize

 

 

SET1의 마지막 세 글자가 제거된 것을 볼 수 있습니다. SET1은 SET2와 동일한 길이의 'ab'이 되며 교체는 이루어지지 않습니다.

 

 

 

옵션을 결합

tr 명령을 사용하면 옵션을 결합할 수도 있습니다. 예를 들어, 다음 명령은 먼저 i를 제외한 모든 문자를 0으로 바꾼 다음 반복되는 0 문자를 압축합니다.

echo 'Linux ize' | tr -t 'abcde' '12'

# Linux ize

 

 

Tr 명령 예제

이 섹션에서는 tr 명령의 일반적인 사용에 대한 몇 가지 예를 살펴보겠습니다.

 

 

소문자를 대문자로 변환

소문자를 대문자로 변환하거나 역순으로 변환하는 것은 tr 명령의 일반적인 사용 사례 중 하나입니다. [:lower:]는 모든 소문자와 일치하고 [:upper:]는 모든 대문자와 일치합니다.

echo 'Linuxize' | tr '[:lower:]' '[:upper:]'

# LINUXIZE

 

 

문자 클래스 대신 다음 범위를 사용할 수도 있습니다.

echo 'Linuxize' | tr 'a-z' 'A-Z'

 

 

대소문자를 소문자로 변환하려면 세트의 위치를 전환하기만 하면 됩니다.

 

 

 

숫자가 아닌 모든 문자를 제거

다음 명령을 실행하면 숫자가 아닌 문자가 모두 제거됩니다.

echo "my phone is 123-456-7890" | tr -cd [:digit:]

# 1234567890

 

 

[:digit:]는 모든 자릿수의 문자를 의미하며, -c 옵션을 사용하면 숫자가 아닌 문자가 모두 제거됩니다. 출력은 다음과 같습니다.

 

 

 

각 단어를 새 줄에 넣기

각 단어를 새 행에 넣으려면 영숫자가 아닌 모든 문자를 일치시키고 새 행으로 바꾸어야 합니다.

echo 'GNU is an operating system' | tr -cs '[:alnum:]' '\n'

# GNU
# is
# an
# operating
# system

 

 

 

빈 줄을 제거

빈 줄을 삭제하려면 반복되는 새 줄 문자를 짜기만 하면 됩니다.

tr -s '\n' < file.txt > new_file.txt

 

 

위의 명령에서는 리디렉션 기호 <을(를) 사용하여 파일 내용을 전달합니다.txt를 tr 명령에 연결합니다. 리디렉션 >은 명령의 출력을 new_file.txt에 씁니다.

 

 

 

별도의 줄에 $PATH 디렉토리를 출력

$PATH 환경 변수는 콜론으로 구분된 디렉토리 목록으로, 명령을 입력할 때 실행 파일을 검색할 디렉토리를 셸에 알려줍니다. 

각 디렉토리를 별도의 줄에 인쇄하려면 콜론(:)을 일치시켜 새 줄로 바꾸어야 합니다.

echo $PATH | tr  ':' '\n'

# /usr/local/sbin
# /usr/local/bin
# /usr/sbin
# /usr/bin
# /sbin

 

 

tr은 문자를 변환하거나 삭제하는 명령입니다. 

매우 유용하지만 tr은 한 글자에서만 작동합니다. 보다 복잡한 패턴 일치 및 문자열 조작을 위해서는 sed 또는 awk를 사용해야 합니다.

반응형