Linux tr 명령을 사용하는 방법

0
152

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

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

목차

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

tr 명령이란 무엇입니까?

리눅스 tr command는 텍스트 스트림에서 원하지 않는 문자를 제거하고 기타 깔끔한 조작 트릭을 위한 빠르고 간단한 유틸리티입니다. “번역”이라는 단어에서 이름을 얻었고 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의 두 번째 문자로 대체됩니다.

이 예는 입력 스트림에서 문자 “c”를 찾아 tr, 각 항목을 문자 “z”로 바꿉니다. 참고 tr 대/소문자를 구분합니다.

우리는 사용하고 있습니다 echo 일부 텍스트를 밀어 넣으려면 tr .

echo abcdefabc | tr 'c' 'z'

단일 문자를 tr로 바꾸기

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

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

echo abcdefabc | tr 'ac' 'xz'

tr로 두 글자 제거

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

echo 'call me Ishmael.' | tr 'abcdjklm' '123'

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

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

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

echo 'call me Ishmael.' | tr -t 'abcdjklm' '123'

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

범위 및 토큰 사용

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

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

echo "How-To Geek" | tr '[a-z]' '[A-Z]'

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

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

echo "How-To Geek" | tr '[A-Z]' '[a-z]'

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

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

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

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

echo "How-To Geek" | tr '[:lower:]' '[:upper:]'
echo "How-To Geek" | tr '[:upper:]' '[:lower:]'

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

경기 반전

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

echo abcdefc | tr -c 'c' '-'

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

이 명령은 문자 “a”를 첫 번째 세트에 추가합니다. “a” 또는 “c” 이외의 모든 것은 하이픈으로 변환됩니다. - ” 성격.

echo abcdefc | tr -c 'ac' '-'

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

문자 삭제 및 압착

우리는 사용할 수 있습니다 tr 대체하지 않고 문자를 모두 제거합니다.

이 명령은 -d (delete) 입력 스트림에서 “a”, “d” 또는 “f” 항목을 제거하는 옵션입니다.

echo abcdefc | tr -d 'adf'

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

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

다른 하나는 우리가 -s (압착-반복) 옵션. 이 옵션은 반복되는 문자를 단일 문자로 줄입니다.

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

echo "a  b  c    de   f   c" | tr -s '[:blank:]'

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

약간 혼란스럽습니다. [:blank:] 토큰은 공백 문자를 나타내고 [:space:] 토큰은 탭과 개행 문자를 포함하여 모든 형태의 공백을 나타냅니다.

이 경우 교체할 수 있습니다. [:blank:] ~와 함께 [:space:] 동일한 결과를 얻습니다.

echo "a  b  c     de   f   c" | tr -s '[:space:]'

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

문자 삭제

차이점 [:blank:] 그리고 [:space:] 문자를 삭제하면 명확해집니다. 이를 위해 우리는 -d (삭제) 옵션을 제공하고 다음과 같은 문자 집합을 제공합니다. tr 입력 스트림에서 찾을 것입니다. 찾은 항목은 모두 제거됩니다.

echo "a  b  c     de   f   c" | tr -d '[:blank:]'

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

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

echo "a  b  c    de   f   c" | tr -d '[:blank:]'

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

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

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

echo "a  b  c    de   f   c" | tr -d ' '

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

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

echo abcd123efg | tr -d '[:digit:]'

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

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

echo abcd123efg | tr -cd '[:digit:]'

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

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

라인 결합 및 분할

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

echo 'one two three four' | tr ' ' 'n'

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

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

echo 'one two three four' | tr ' ' ':'

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

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

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

echo $PATH
echo $PATH | tr ":" "n"

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

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

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

cat files.txt
cat lines.txt | tr 'n' ' '

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

파이프와 함께 tr 사용

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

이 명령은 tr 네번.

  • 첫번째 tr 입력에서 하이픈 “-“를 삭제합니다.
  • 두번째 tr 반복되는 공간을 하나의 공간으로 압축합니다.
  • 세 번째 tr 공백을 밑줄 “_” 문자로 바꿉니다.
  • 네 번째이자 마지막 tr 문자열을 소문자로 변환합니다.
echo "Mangled FiLE-nAMe.txt" | tr -d '-' | tr -s ' ' | tr ' ' '_' | tr '[:upper:]' '[:lower:]'

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

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

단순한 것은 단순하다

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

실수하지 마세요. 자주 찾을 수 있습니다. tr 다음과 같은 더 복잡한 도구를 사용하지 않고도 필요한 작업을 수행할 수 있습니다. sed .

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

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

하지만, 어떤 일을 하기가 어렵다면 tr 긴 데이지 체인 명령을 구축하는 자신을 발견하면 아마도 다음을 사용해야 합니다. sed.