Programming/Linux

[리눅스] tr 명령

kevin_01 2024. 1. 24. 17:10
728x90

tr 명령 구문

tr OPIONS... SET1 [SET2]
  • tr 은 일반적으로 길이가 동일한 두 문자 집합을 허용하며 첫 번째 세트의 문자를 두 번째 세트의 해당 문자로 대체한다.
  • SET는 기본적으로 특수 백슬래시 이스케이프 문자를 포함한 일련의 문자이다.
  • 다음 예에서 tr은 첫 번째 세트의 문자와 두 번째 세트의 일치하는 문자를 매핑하여 표준 입력(리눅스 크기 조정)의 모든 문자를 바꾼다.
# l = r, i = e, n = d
echo 'linuxize' | tr 'lin' 'red'

# reduxeze
  • 문자 세트는 문자 범위를 사용하여 정의할 수 있다.
# l ~ o = w ~ z
echo 'linuxize' | tr 'lmno' 'wxyz'
echo 'linuxize' | tr 'l-o' 'w-z'

tr 명령 옵션

  • -c (—complete) 옵션을 사용하면 tr SET1 에 없는 모든 문자를 대체한다.
    • 아래 예에는 ‘li’ 를 제외한 모든 문자가 두 번째 세트의 마지막 문자로 바뀐다.
echo 'linuxize' | tr -c 'li' 'xy'

# liyyyiyyy

# linuxize 보다 많이 y가 출력된다 이는 마지막 줄바꿈문자 \n 마저도 y로 치환되기 때문(줄 바꿈 X)
  • -d(—delete)옵션은 tr에게 SET1에 지정된 문자를 삭제하도록 지시합니다. 압축하지 않고 문자를 삭제할 때는 한 세트만 지정한다.
# l, i, z 문자가 제거된다.
echo 'Linuxize' | tr -d 'liz'

# Lnuxe - 대문자 L이 포함되어 있지만 SET의 l문자는 소문자이기 때문에 L문자는 삭제되지 않는다.
  • -s(—squeeze-repeats) 옵션은 반복 발생 시퀀스를 마지막 SET에 설정된 문자로 대체한다.
# tr이 반복되는 공백 문자를 제거한다.
echo "GNU       \     Linux" | tr -s ' '

# GNU \ Linux

# SET2를 사용하면 SET1에 지정된 문자의 시퀀스가 SET2로 바뀐다.
echo "GNU      \      Linux" | tr -s ' ' '_'

# GNU_\_Linux
  • -t(—turncate-set1) 옵션은 추가 처리를 수행하기 전에 강제로 SET1을 SET2 길이로 자르도록 한다.
# 기본적으로 SET1 이 SET2보다 크면 SET2의 마지막 문자가 재사용됩니다.
echo 'abcde' | tr 'abcde' '123'

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

# -t 옵션을 사용해서 동일한 명령을 수행한다면
echo 'abcde' | tr -t 'abcde' '123'

# 123de - 출력의 SET1문자가 SET2길이로 잘려 치환되지 않는다.

옵션을 결합

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

# 0i0i0

tr 명령 예제

  • 소문자를 대문자로 변환
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

# 문자가 아닌것들을 모두 축약하면서 \n 문자로 바꿈
  • 빈 줄을 제거
# 빈 줄을 삭제하려면 새 줄 문자를 짜면 된다.
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를 사용해야 한다.
728x90

'Programming > Linux' 카테고리의 다른 글

[리눅스] iptables 개념 및 명령어  (0) 2024.01.23
[리눅스] top 명령  (0) 2024.01.23
[리눅스] 파일 복사 및 이동  (0) 2024.01.23
[리눅스] 파일 읽기  (2) 2024.01.23
[리눅스] 파이프 및 리디렉션  (0) 2024.01.23