Linux tr 명령을 사용하는 방법

게시 됨: 2023-05-17
노트북의 Ubuntu Linux 시작 화면
Jordan Gloor / 하우투 괴짜
tr 명령은 텍스트 스트림에서 변환을 수행하여 출력으로 새 스트림을 생성합니다. 명령줄에서 설정한 규칙에 따라 문자를 대체, 삭제 또는 변환할 수 있습니다.

Linux에서 텍스트 스트림을 조작하기 위한 간단한 방법이 필요하십니까? 입력 텍스트를 교체, 제거, 결합 및 압축하는 데 시간을 절약할 수 있는 tr 명령만 있으면 됩니다. 이것이 완료되는 방법입니다.

목차

tr 명령이란 무엇입니까?
문자 바꾸기
범위 및 토큰 사용
경기 반전
문자 삭제 및 압착
문자 삭제
라인 결합 및 분할
파이프와 함께 tr 사용
단순한 것은 단순하다

tr 명령이란 무엇입니까?

Linux tr 명령은 텍스트 스트림에서 원하지 않는 문자를 제거하고 다른 깔끔한 조작 트릭을 위한 빠르고 간단한 유틸리티입니다. "translate"라는 단어에서 이름을 얻었으며 tr 의 뿌리는 유닉스 전통에 뿌리를 두고 있습니다.

우리 모두 알다시피 Linux는 Unix를 오픈 소스로 재작성한 것입니다. 믹스에 자체 항목도 추가합니다. 이것은 바이트 단위 복제본은 아니지만 Unix 운영 체제에서 설계 원칙과 엔지니어링 조정의 많은 부분을 분명히 가져왔습니다.

지금까지 두 개의 Linux 배포판(EulerOS 및 Inspur K-UX)만이 POSIX 호환으로 인증되고 Unix의 구현으로 공식적으로 승인된 고무 도장이 찍혔지만 Linux는 비즈니스 세계에서 거의 Unix를 완전히 대체했습니다.

적어도 핵심 유틸리티의 모든 Linux 배포판은 Unix 철학을 고수합니다. Unix 철학은 Unix 선구자들이 새로운 운영 체제에 대해 가졌던 비전을 요약합니다. 이것은 종종 "한 가지 일을 잘하는 프로그램 작성"으로 바꿔 표현됩니다. 그러나 그것보다 더 많은 것이 있습니다.

가장 강력한 혁신 중 하나는 프로그램이 다른 프로그램에 대한 입력으로 사용할 수 있는 출력을 생성해야 한다는 것입니다. 한 프로그램의 출력 스트림을 라인의 다음 프로그램에 대한 입력 스트림으로 사용하여 명령줄 유틸리티를 함께 데이지 체인하는 기능은 매우 강력합니다.

때로는 다음 프로그램에 도달하기 전에 한 프로그램의 출력을 미세 조정하거나 조정하고 싶을 수 있습니다. 또는 Linux 명령줄 도구에서 입력을 받지 않고 특정 요구 사항을 염두에 두고 생성되지 않은 파일에서 텍스트를 스트리밍하고 있을 수도 있습니다.

이것은 tr 자체적으로 들어오는 곳입니다. 입력 스트림에서 일련의 간단한 변환을 수행하여 출력 스트림을 생성할 수 있습니다. 해당 출력 스트림은 파일로 리디렉션되거나 다른 Linux 프로그램으로 공급되거나 스트림에 여러 변환이 적용되도록 tr 의 다른 인스턴스로 공급될 수 있습니다.

문자 바꾸기

tr 명령은 규칙에 따라 입력 스트림에서 작동합니다. 명령줄 옵션 없이 사용하면 tr 의 기본 작업은 입력 스트림의 문자를 다른 문자로 대체하는 것입니다.

tr 에 대한 명령에는 일반적으로 두 세트의 문자가 필요합니다. 첫 번째 세트는 입력 스트림에서 발견되면 대체될 문자를 보유합니다. 두 번째 세트에는 대체될 문자가 있습니다.

이것이 작동하는 방식은 세트 1의 첫 번째 문자가 세트 2의 첫 번째 문자로 대체되는 것입니다. 세트 1의 두 번째 문자 발생은 세트 2의 두 번째 문자로 대체됩니다.

이 예제는 tr 에 대한 입력 스트림에서 문자 "c"를 찾고 각 항목을 문자 "z"로 바꿉니다. tr 은 대소문자를 구분합니다.

echo 사용하여 일부 텍스트를 tr 에 푸시합니다.

 에코 abcdefabc | tr 'c' 'z' 

단일 문자를 tr로 바꾸기

모든 "c"는 "z"로 대체되고 새 문자열이 터미널 창에 기록됩니다.

이번에는 "a"와 "c"라는 두 글자를 검색합니다. 우리는 "ac"를 검색하지 않습니다. "a"를 찾은 다음 "c"를 찾습니다. "a"를 "x"로 바꾸고 "c"를 "z"로 바꾸겠습니다.

 에코 abcdefabc | tr 'ac' 'xz' 

tr로 두 글자 제거

이것이 작동하려면 두 세트에 동일한 수의 문자가 있어야 합니다. 그렇지 않으면 예측 가능하지만 원하지 않는 동작이 발생합니다.

 echo '저를 이스마엘이라고 불러주세요.' | tr 'abcdjklm' '123' 

불균형 문자 집합을 tr과 함께 사용

세트 2보다 세트 1에 더 많은 캐릭터가 있습니다. 문자 "d"에서 "m"은 세트 2에 해당 문자가 없습니다. 여전히 대체되지만 세트 2의 마지막 문자로 모두 대체됩니다.

어떤 경우에는 이것이 유용할 수 있지만 이를 방지하려면 -t (자르기) 옵션을 사용할 수 있습니다. 이는 세트 2에 일치하는 문자가 있는 세트 1에 포함된 문자만 대체합니다.

 echo '저를 이스마엘이라고 불러주세요.' | tr -t 'abcdjklm' '123' 

truncate 옵션과 함께 tr과 함께 불균형 문자 집합 사용

범위 및 토큰 사용

세트 1과 세트 2는 문자 범위를 포함할 수 있습니다. 예를 들어 [az] 모든 소문자를 나타내고 [AZ] 는 모든 대문자를 나타냅니다. 이것을 사용하여 텍스트 스트림의 대소문자를 변경할 수 있습니다.

그러면 입력 스트림이 대문자로 변환됩니다.

 에코 "괴짜 방법" | tr '[az]' '[AZ]' 

문자 범위를 사용하여 문자열을 대문자로 변환

대소문자를 다른 방향으로 뒤집기 위해 동일한 명령을 사용할 수 있지만 명령줄에서 대문자와 소문자 범위를 바꿉니다.

 에코 "괴짜 방법" | tr '[AZ]' '[아즈]' 

문자 범위를 사용하여 문자열을 소문자로 변환

일치시키고자 하는 몇 가지 일반적인 경우에 사용할 수 있는 토큰이 있습니다.

  • [:alnum:] : 문자와 숫자.
  • [:alpha:] : 문자만 가능합니다.
  • [:digit:] : 숫자만.
  • [:blank:] : 탭과 공백.
  • [:space:] : 개행 문자를 포함한 모든 공백.
  • [:graph:] : 기호를 포함하지만 공백은 포함하지 않는 모든 문자입니다.
  • [:print:] : 공백을 포함하여 기호를 포함한 모든 문자.
  • [:punct:] : 모든 구두점 문자.
  • [:lower:] : 소문자.
  • [:upper:] : 대문자.

토큰을 사용하여 소문자를 대문자로, 대문자를 소문자로 쉽게 변환할 수 있습니다.

 에코 "괴짜 방법" | tr '[:하위:]' '[:상위:]'
 에코 "괴짜 방법" | tr '[:위:]' '[:낮은:]' 

토큰을 사용하여 텍스트 문자열의 대소문자 변경

경기 반전

-c (보완) 옵션은 첫 번째 집합에 있는 문자를 제외한 모든 문자와 일치합니다. 이 명령은 문자 "c"를 제외한 모든 것을 하이픈( - )으로 변환합니다.

 에코 abcdefc | tr -c 'c' '-' 

지정된 문자를 제외한 모든 문자를 다른 문자로 바꾸기

이 명령은 문자 "a"를 첫 번째 세트에 추가합니다. "a" 또는 "c" 이외의 모든 항목은 하이픈 " - " 문자로 변환됩니다.

 에코 abcdefc | tr -c 'ac' '-' 

지정된 여러 문자를 제외한 모든 문자를 다른 문자로 교체

문자 삭제 및 압착

tr 사용하여 대체 없이 문자를 모두 제거할 수 있습니다.

이 명령은 -d (삭제) 옵션을 사용하여 입력 스트림에서 "a", "d" 또는 "f" 항목을 제거합니다.

 에코 abcdefc | tr -d 'adf' 

tr을 사용하여 텍스트 문자열에서 여러 문자 삭제

이것은 명령줄에 두 개가 아닌 하나의 문자 집합만 있는 경우입니다.

다른 하나는 -s (squeeze-repeats) 옵션을 사용할 때입니다. 이 옵션은 반복되는 문자를 단일 문자로 줄입니다.

이 예제는 공백 문자의 반복 시퀀스를 단일 공백으로 줄입니다.

 에코 "abc de fc" | tr -s '[:공백:]' 

tr을 사용하여 반복되는 문자 시퀀스를 단일 문자 발생으로 변경

[:blank:] 토큰이 공백 문자를 나타내고 [:space:] 토큰이 탭과 줄 바꿈 문자를 포함하여 모든 형식의 공백을 나타내는 것은 약간 혼란스럽습니다.

이 경우 [:blank:] [:space:] 로 교체해도 동일한 결과를 얻을 수 있습니다.

 에코 "abc de fc" | tr -s '[:공간:]' 

tr을 사용하여 반복되는 문자 시퀀스를 단일 문자 발생으로 변경

문자 삭제

[:blank:][:space:] 의 차이점은 문자를 삭제할 때 분명해집니다. 이를 위해 -d (삭제) 옵션을 사용하고 tr 이 입력 스트림에서 찾을 문자 집합을 제공합니다. 찾은 항목은 모두 제거됩니다.

 에코 "abc de fc" | tr -d '[:공백:]' 

tr을 사용하여 텍스트 문자열에서 공백(공백 문자) 삭제

공백이 삭제됩니다. 출력 스트림이 터미널 창에 작성된 후 줄 바꿈을 얻습니다. 해당 명령을 반복하고 공백 대신 [:space:] 사용하면 다른 결과를 얻게 됩니다.

 에코 "abc de fc" | tr -d '[:공백:]' 

tr을 사용하여 텍스트 문자열에서 공백 삭제

이번에는 출력 다음에 새 줄을 시작하지 않고 명령 프롬프트가 바로 맞닿아 있습니다. 이는 [:space:] 에 개행이 포함되어 있기 때문입니다. 모든 공백, 탭 및 개행 문자는 입력 스트림에서 제거됩니다.

물론 실제 공백 문자를 사용할 수도 있습니다.

 에코 "abc de fc" | tr -d '' 

tr로 공백 문자를 지정하여 텍스트 문자열에서 공백 삭제

숫자를 쉽게 삭제할 수 있습니다.

 에코 abcd123efg | tr -d '[:숫자:]' 

tr을 사용하여 텍스트 문자열에서 숫자 삭제

-c (보완) 및 -d (삭제) 옵션을 결합하여 숫자를 제외한 모든 항목을 삭제할 수 있습니다.

 에코 abcd123efg | tr -cd '[:숫자:]' 

tr을 사용하여 텍스트 문자열에서 숫자를 제외한 모든 항목 삭제

숫자를 제외한 모든 것은 모든 문자 공백을 의미하므로 다시 한 번 종료 줄 바꿈을 잃습니다.

라인 결합 및 분할

개행 문자를 공백으로 대체하면 텍스트 줄을 분할하고 각 단어를 자체 줄에 배치할 수 있습니다.

 에코 '하나 둘 셋 넷' | tr ' ' '\n' 

tr을 사용하여 한 줄의 텍스트를 한 줄에 하나의 단어로 분할

단어를 구분하는 구분 기호도 변경할 수 있습니다. 이 명령은 콜론 ” : ”을 공백으로 대체합니다.

 에코 '하나 둘 셋 넷' | tr ' ' ':' 

tr을 사용하여 단어 구분 기호를 공백에서 콜론으로 변경

사용 중인 모든 구분 기호를 찾아 줄 바꿈 문자로 대체하여 읽기 어려운 텍스트를 관리하기 쉬운 출력으로 분할할 수 있습니다.

경로 환경 변수는 많은 디렉터리 경로의 긴 문자열입니다. 콜론 ” : ”은 각 경로를 구분합니다. 개행 문자로 변경하겠습니다.

 에코 $PATH
 에코 $PATH | tr ":" "\n" 

$PATH 환경 변수를 tr을 사용하여 한 줄에 하나씩 별도의 디렉토리 경로로 분할

시각적으로 파싱하기가 훨씬 쉽습니다.

한 줄로 다시 포맷하려는 출력이 있는 경우에도 그렇게 할 수 있습니다. "lines.txt" 파일에는 각 줄에 한 단어씩 있는 일부 텍스트가 포함되어 있습니다. 우리는 그것을 tr 에 공급하고 그것을 한 줄로 변환할 것입니다.

 고양이 파일.txt
 고양이 라인.txt | tr '\n' ' ' 

tr을 사용하여 여러 줄 입력을 한 줄의 텍스트로 결합

파이프와 함께 tr 사용

tr 의 출력을 다른 프로그램의 입력으로 사용하거나 tr 자체에 사용할 수도 있습니다.

이 명령은 tr 네 번 사용합니다.

  • 첫 번째 tr 입력에서 하이픈 "-"를 삭제합니다.
  • 두 번째 tr 반복되는 공백을 단일 공백으로 압축합니다.
  • 세 번째 tr 공백을 밑줄 "_" 문자로 대체합니다.
  • 네 번째이자 마지막 tr 문자열을 소문자로 변환합니다.
 echo "잘못된 파일-nAMe.txt" | tr -d '-' | tr -s ' ' | tr ' ' '_' | tr '[:위:]' '[:낮은:]' 

네 개의 tr 인스턴스 파이프라인

관련: Linux에서 파이프를 사용하는 방법

단순한 것은 단순하다

tr 명령은 간단하기 때문에 훌륭합니다. 배울 것도 기억할 것도 많지 않습니다. 그러나 그 단순함은 단점이 될 수도 있습니다.

실수하지 마세요. sed 와 같은 더 복잡한 도구에 도달할 필요 없이 tr 이 필요한 작업을 수행하도록 하는 경우가 자주 있습니다.

Linux에서 sed 명령을 사용하는 방법
관련 Linux에서 sed 명령을 사용하는 방법

그러나 tr 로 무언가를 하는 데 어려움을 겪고 있고 긴 데이지 체인 명령을 구축하고 있는 자신을 발견했다면 아마도 sed 사용해야 할 것입니다.