Tr (유닉스)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
tr은 문자를 변환, 삭제, 또는 압축하는 데 사용되는 유닉스 명령어이다. 이 명령어는 문자 치환, 삭제, 압축 기능을 제공하며, 문자 집합을 지정하여 다양한 방식으로 텍스트를 처리한다. tr은 두 개의 문자 집합을 인수로 받아 첫 번째 집합의 문자를 두 번째 집합의 해당 문자로 대체하며, -d 옵션을 통해 특정 문자를 삭제하거나, -s 옵션을 사용하여 연속된 문자를 단일 문자로 압축할 수 있다. 또한, 고급 활용을 위해 -c 옵션을 사용하여 지정된 문자 집합의 여집합을 대상으로 작업할 수 있으며, 파이프라인을 통해 다른 명령어와 연계하여 사용할 수도 있다. tr은 다양한 운영체제에서 구현되어 있으며, 루비와 펄과 같은 다른 프로그래밍 언어에도 유사한 기능이 존재한다.
더 읽어볼만한 페이지
- 유닉스 텍스트 처리 유틸리티 - Apropos
apropos는 사용자가 입력한 키워드와 관련된 매뉴얼 페이지를 검색하는 명령어로, man -k의 래퍼로 작동하며 대소문자를 구분하지 않고 매뉴얼 페이지의 이름 섹션에서 키워드를 검색하여 관련 페이지 목록을 반환한다. - 유닉스 텍스트 처리 유틸리티 - Cut (유닉스)
`cut`은 텍스트 파일이나 표준 입력에서 특정 부분을 추출하는 유닉스 명령어이며, 바이트, 문자, 필드 단위 추출을 지원하고 구분자를 지정하여 필드를 나눌 수 있다. - 유닉스 SUS2008 유틸리티 - AWK
AWK는 1977년에 개발된 텍스트 처리 및 프로그래밍 언어로, 유닉스 환경에서 텍스트 처리를 위해 설계되었으며 정규 표현식 처리 기능을 통해 텍스트 분석, 데이터 추출, 보고서 생성 등 다양한 작업을 수행한다. - 유닉스 SUS2008 유틸리티 - 로케일
로케일은 소프트웨어 국제화 및 지역화에서 사용자 문화적 배경에 맞춰 사용 환경을 조정하는 설정으로, 표시 언어, 숫자/날짜 형식, 문자 분류, 통화 형식 등을 포함한다.
Tr (유닉스) - [IT 관련 정보]에 관한 문서 | |
---|---|
설명 | |
종류 | 유닉스 텍스트 포매팅 유틸리티 |
일반 정보 | |
이름 | tr |
제작자 | 더글러스 매킬로이 (AT&T 벨 연구소) |
개발자 | 다양한 오픈 소스 및 상용 개발자들 |
발표일 | 1973년 11월 |
프로그래밍 언어 | C |
운영 체제 | 유닉스 유닉스 계열 Plan 9 Inferno OS-9 MSX-DOS IBM i |
플랫폼 | 크로스 플랫폼 |
장르 | 명령 |
라이선스 | coreutils: GPLv3+ Plan 9: MIT 라이선스 |
웹사이트 | 해당사항 없음 |
2. 기본 사용법
`tr`은 표준 입력에서 바이트 스트림을 읽어 표준 출력으로 결과를 내보내는 유틸리티이다. 명령줄 인수로 두 개의 문자 집합(일반적으로 같은 길이)을 받아서, 첫 번째 집합의 문자를 두 번째 집합의 해당 요소로 대체한다.
```
tr 'abcd' 'jkmn'
```
위 명령어는 ''a''를 ''j''로, ''b''를 ''k''로, ''c''를 ''m''으로, ''d''를 ''n''으로 바꾼다. 문자 집합은 `a-d`와 같이 문자 범위를 사용하여 줄여 쓸 수 있다.
POSIX을 준수하는 `tr` 버전에서는 문자 범위가 로케일의 정렬 순서에 따라 달라지므로, 다른 로케일에서 실행될 수 있는 스크립트에서는 문자 범위를 피하고 `[:alpha:]`와 같은 POSIX 문자 집합을 사용하는 것이 안전하다.
`-s` 플래그를 사용하면 출력에서 연속되는 동일한 문자를 하나로 압축할 수 있다. 예를 들어,
```
tr -s '\n'
```
위 명령어는 하나 이상의 연속된 개행 문자를 하나의 개행 문자로 바꾼다.
`-d` 플래그를 지정하면 입력에서 지정된 문자 집합의 모든 문자를 삭제한다. 다음은 캐리지 리턴 문자를 제거하는 명령어이다.
```
tr -d '\r'
```
`-c` 플래그는 첫 번째 문자 집합의 보수를 나타낸다. 예를 들어,
```
tr -cd '[:alnum:]'
```
위 명령어는 알파벳과 숫자를 제외한 모든 문자를 제거한다.
`tr`에서 "\n"을 "\r\n"으로 치환하는 특수한 경우가 있다. 그러나 모든 `tr`이 `-A` 옵션을 지원하는 것은 아니며, 셸이 역슬래시를 해석하므로 작은따옴표 대신 큰따옴표를 사용할 수 없다. \n, \12, ^J는 각각 이스케이프 문자, ASCII 8진수, 캐럿 표기를 사용한 줄 바꿈 문자를 나타내며, \r, \15, ^M은 캐리지 리턴 문자이다. 더 자세한 내용은 줄 바꿈 문자 문서를 참조하라.
Ruby와 Perl에도 비슷한 역할을 하는 `tr` 연산자(메서드)가 있다.[2]
2. 1. 문자 치환
`tr` 유틸리티는 표준 입력에서 받은 문자열을 변경하여 표준 출력으로 내보낸다. 명령줄 인수로 두 개의 문자 집합을 받는데, 첫 번째 집합의 문자를 두 번째 집합의 해당 문자로 바꾼다.예를 들어, 다음 명령어는
```
tr 'abcd' 'jkmn'
```
`a`를 `j`로, `b`를 `k`로, `c`를 `m`으로, `d`를 `n`으로 바꾼다.
문자 범위를 사용하여 문자 집합을 축약할 수 있다. 위의 예는 다음과 같이 쓸 수 있다.
```
tr 'a-d' 'jkmn'
```
POSIX를 준수하는 `tr` 버전에서는 로케일의 정렬 순서에 따라 문자 범위가 달라질 수 있으므로, 스크립트에서는 문자 범위를 피하고 `[:alpha:]`와 같은 POSIX 문자 집합을 사용하는 것이 안전하다.
`s` 플래그를 사용하면 출력에서 연속되는 동일한 문자를 하나로 압축한다. 예를 들어,
```
tr -s '\n'
```
는 하나 이상의 연속된 개행 문자를 하나의 개행 문자로 바꾼다.
`d` 플래그를 사용하면 입력에서 지정된 문자 집합의 모든 문자를 삭제한다. 예를 들어, 다음 명령어는 캐리지 리턴 문자를 제거한다.
```
tr -d '\r'
```
`c` 플래그는 첫 번째 문자 집합의 보수(complement)를 나타낸다. 예를 들어,
```
tr -cd '[:alnum:]'
```
는 알파벳과 숫자를 제외한 모든 문자를 제거한다.
다음은 알파벳을 알파벳 순서로 7자 뒤의 문자로 치환하는 예시이다(카이사르 암호의 변형).
```
$ echo cheer | tr abcdefghijklmnopqrstuvwxyz hijklmnopqrstuvwxyzabcdefg
jolly
```
POSIX를 준수한다면, `tr a-z h-za-g`로 쓸 수 있다.
다음 예는 알파벳을 알파벳 순서로 한 글자 앞의 문자로 모두 치환한다(''a''는 ''z''로).[1]
```
$ echo "ibm 9000" >computer.txt
$ tr a-z za-y
hal 9000
```
POSIX와 호환되지 않는 이전 `tr`에서는 문자의 범위를 지정하려면 대괄호로 묶어야 하며, 셸이 해석하는 것을 방지하기 위해 인용 부호로 묶어야 한다.[1]
```
$ tr "[a-z]" "z[a-y]"
```
Ruby와 Perl에도 비슷한 역할을 하는 `tr` 연산자(메서드)가 있다.[2]
2. 2. 문자 삭제
`tr` 유틸리티에 `-d` 플래그를 지정하면 입력에서 지정된 문자 집합의 모든 문자를 삭제한다. 이 경우, 단일 문자 집합 인수만 사용된다. 예를 들어, 다음 명령은 캐리지 리턴 문자를 제거한다.tr -d '\r'
`c` 플래그는 첫 번째 문자 집합의 보수를 나타낸다. 예를 들어, 다음 명령은 알파벳이나 숫자가 아닌 모든 문자를 제거한다.[1]
tr -cd '[:alnum:]'
2. 3. 문자 압축
`tr`의 `-s` 옵션은 출력에서 연속적으로 나타나는 동일한 문자를 단일 문자로 압축한다. 예를 들어, 다음 명령어는```
tr -s '\n'
```
하나 이상의 연속된 개행 문자를 단일 개행 문자로 바꾼다.
2. 4. 문자 집합
`tr` 유틸리티는 문자 집합을 기반으로 문자를 치환하거나 삭제하는 기능을 제공한다. 문자 집합은 일반적으로 두 개가 주어지며, 첫 번째 집합의 문자들이 두 번째 집합의 해당 위치에 있는 문자로 대체된다.문자 집합은 문자 범위를 사용하여 간략하게 표현할 수 있다. 예를 들어, `'a-d'`는 `'abcd'`와 동일하게 동작한다.[1] 하지만, POSIX를 준수하는 `tr` 버전에서는 문자 범위가 로케일의 정렬 순서에 따라 달라질 수 있으므로, 스크립트의 이식성을 위해 `'[:alpha:]'`와 같은 POSIX 문자 클래스를 사용하는 것이 더 안전하다.[1]
`tr`에서 POSIX 이전 버전에서는 문자의 범위를 지정하려면 대괄호로 묶어야 했으며 (예: `"[a-z]"`), 셸이 해석하는 것을 방지하기 위해 인용 부호로 묶어야 했다. 하지만, POSIX `tr`에서는 대괄호를 해석하지 않으므로 주의해야 한다.[1]
다음은 POSIX 문자 클래스를 사용하여 모든 비 알파벳 숫자 문자를 제거하는 예시이다.
```
tr -cd '[:alnum:]'
3. 고급 활용
`tr` 명령어는 고급 옵션을 통해 다양한 문자열 변환을 수행할 수 있다.
- `-c` 옵션 (보수): 지정된 문자 집합의 여집합(Complement)을 사용한다. 예를 들어, `tr -cd '[:alnum:]'` 명령어는 알파벳과 숫자를 제외한 모든 문자를 제거한다.[1]
- `-s` 옵션 (연속 압축): 출력에서 연속되는 동일한 문자를 하나의 문자로 압축한다. 예를 들어, `tr -s '\n'` 명령어는 하나 이상의 연속된 개행 문자(`\n`)를 하나의 개행 문자로 바꾼다.
- `-d` 옵션 (삭제): 입력에서 지정된 문자 집합의 모든 문자를 삭제한다. 예를 들어, `tr -d '\r'` 명령어는 캐리지 리턴 문자(`\r`)를 제거한다.
`tr` 명령어는 다른 명령어와 파이프라인을 통해 함께 사용될 때 유용하다.
예시:1. "cheer" 문자열에서 각 알파벳을 알파벳 순서로 7자 뒤의 문자로 치환 ( 카이사르 암호의 변형):
```bash
$ echo cheer | tr abcdefghijklmnopqrstuvwxyz hijklmnopqrstuvwxyzabcdefg
'''jolly'''
```
`echo` 명령어로 "cheer" 문자열을 `tr` 명령어의 표준 입력으로 전달하고, `tr` 명령어는 지정된 규칙에 따라 문자를 치환하여 "jolly"를 표준 출력으로 출력한다.
2. `tr`을 사용하여 파일 내용 변경:
```bash
$ echo "ibm 9000" > computer.txt
$ tr a-z za-y < computer.txt
'''hal 9000'''
```
`echo` 명령으로 "ibm 9000" 문자열을 `computer.txt` 파일에 저장한다. 그 후 쉘의 리다이렉션을 통해 `computer.txt`파일을 `tr`의 입력으로 사용하여, `tr` 명령어를 통해 `computer.txt` 파일의 내용을 읽어 각 알파벳을 바로 앞의 문자로 바꾼다. (예: 'a'는 'z'로, 'b'는 'a'로). 결과적으로 "hal 9000"이 출력된다.
3. 1. 보수(`-c`) 옵션
`tr`에서 `-c` 옵션을 사용하면 지정된 문자 집합의 여집합(Complement)을 사용하게 된다. 예를 들어,```
tr -cd '[:alnum:]'
```
위 명령어는 알파벳과 숫자를 제외한 모든 문자를 제거한다.[1]
3. 2. 조합 활용
`tr` 명령어의 여러 옵션을 조합하여 복잡한 문자열 변환을 수행할 수 있다.- `s` 플래그는 출력에서 연속되는 동일한 문자를 하나의 문자로 압축한다. 예를 들어, 다음 명령어는 하나 이상의 연속된 개행 문자(`\n`)를 하나의 개행 문자로 바꾼다.
```
tr -s '\n'
```
- `d` 플래그는 입력에서 지정된 문자 집합의 모든 문자를 삭제한다. 예를 들어, 다음 명령어는 캐리지 리턴 문자(`\r`)를 제거한다.
```
tr -d '\r'
```
- `c` 플래그는 첫 번째 문자 집합의 여집합을 나타낸다. 예를 들어, 다음 명령어는 알파벳과 숫자를 제외한 모든 문자를 제거한다.
```
tr -cd '[:alnum:]'
3. 3. 파이프라인 연계
`tr` 명령어는 다른 명령어와 파이프라인을 통해 함께 사용될 때 유용하다.예를 들어, "cheer"라는 문자열에서 각 알파벳을 알파벳 순서로 7자 뒤의 문자로 치환하는 경우가 있다. (예: 'a'는 'h'로 바뀜, 카이사르 암호의 변형)
```bash
$ echo cheer | tr abcdefghijklmnopqrstuvwxyz hijklmnopqrstuvwxyzabcdefg
'''jolly'''
```
`echo` 명령어를 사용하여 "cheer" 문자열을 `tr` 명령어의 표준 입력으로 전달하고, `tr` 명령어는 지정된 규칙에 따라 문자를 치환하여 "jolly"를 표준 출력으로 출력한다.
다음은 `tr`을 사용하여 파일 내용을 변경하는 예시이다.
```bash
$ echo "ibm 9000" > computer.txt
$ tr a-z za-y < computer.txt
'''hal 9000'''
```
`echo` 명령으로 "ibm 9000" 문자열을 `computer.txt` 파일에 저장한다. 그 후 쉘의 리다이렉션을 통해 `computer.txt`파일을 `tr`의 입력으로 사용하여, `tr` 명령어를 통해 `computer.txt` 파일의 내용을 읽어 각 알파벳을 바로 앞의 문자로 바꾼다. (예: 'a'는 'z'로, 'b'는 'a'로). 결과적으로 "hal 9000"이 출력된다.
4. 구현 및 호환성
`tr` 명령어는 더글러스 맥클로이가 처음 작성했으며, 버전 4 유닉스에 도입되었다.[1] GNU coreutils에 포함된 `tr` 버전은 짐 메이어링이 작성했다.[2]
이 명령어는 다음과 같은 다양한 운영 체제에서 사용할 수 있다.
- 마이크로소프트 윈도우: GNU 유닉스 유틸리티를 네이티브 Win32로 포팅한 UnxUtils를 통해 제공된다.[3]
- OS-9 셸[4]
- ASCII의 MSX-DOS 버전 2용 ''MSX-DOS2 툴''[5]
- IBM i 운영 체제[6]
대부분의 `tr` 버전은 단일 바이트 문자만 처리하며 유니코드를 지원하지 않지만, Heirloom Toolchest 구현은 기본적인 유니코드 지원을 제공한다.[1]
루비와 펄에도 `tr`과 유사하게 작동하는 내부 연산자가 있다.[7][8] Tcl의 `string map` 명령어는 문자열을 문자열에 매핑한다는 점에서 `tr`보다 더 일반적이다.[9]
4. 1. POSIX 표준
POSIX를 준수하는 `tr` 버전에서 문자 범위로 표현되는 집합은 로케일의 정렬 순서에 따라 달라진다. 따라서 작성된 로케일과 다른 로케일에서 실행될 수 있는 스크립트에서는 문자 범위를 피하는 것이 더 안전하다. 범위는 종종 `[:alpha:]`와 같은 POSIX 문자 집합으로 대체될 수 있다.예를 들어 알파벳을 알파벳 순서로 7자 뒤의 문자로 모두 치환할 때(''a''는 ''h''로, 카이사르 암호의 변형) POSIX를 준수한다면 `a-z h-za-g`와 같이 쓸 수 있다.[1]
POSIX와 호환되지 않는 이전 `tr`에서는 문자의 범위를 지정하려면 대괄호로 묶어야 하며, 셸이 해석하는 것을 방지하기 위해 인용 부호로 묶어야 한다.[2] 어느 버전이 호출되는지 알 수 없는 경우에는 범위 지정을 하지 않고 모든 문자를 나열해야 한다.[3]
4. 2. 유니코드 지원
GNU `tr` 및 클래식 유닉스 `tr`을 포함한 대부분의 `tr` 버전은 단일 바이트 문자만 처리하며 유니코드를 준수하지 않는다. 예외적으로 기본적인 유니코드 지원을 제공하는 Heirloom Toolchest 구현이 있다.[1]4. 3. 운영체제별 구현
GNU coreutils에 포함된 `tr` 버전은 짐 메이어링이 작성했다.[1] 이 명령어는 GNU 유닉스 유틸리티를 Win32로 이식한 UnxUtils 패키지를 통해 마이크로소프트 윈도우에서도 사용할 수 있다.[3] OS-9 셸에서도 사용 가능하다.[4]`tr` 명령어는 ASCII의 MSX-DOS 버전 2용 ''MSX-DOS2 툴''에도 포함되어 있으며,[5] IBM i 운영 체제로도 이식되었다.[6]
GNU `tr`과 클래식 유닉스 `tr`을 포함한 대부분의 `tr` 버전은 단일 바이트 문자만 처리하고 유니코드를 지원하지 않는다. 예외적으로 Heirloom Toolchest 구현은 기본적인 유니코드 지원을 제공한다.
5. 기타
루비와 펄에도 비슷하게 작동하는 내부 `tr` 연산자가 있다.[7][8] Tcl의 `string map` 명령어는 문자에서 문자로 매핑하는 `tr`과 달리 문자열을 문자열에 매핑한다는 점에서 더 일반적이다.[9]
루비와 펄에도 `tr` 연산자(메서드)가 있으며, 비슷한 역할을 한다. 예를 들어, 일본어를 처리할 수 있는 Perl을 사용하면 히라가나와 가타카나를 교환하는 스크립트를 작성할 수 있다. (단, "ヴ", "ヵ", "ヶ" 제외.)
다음은 알파벳을 알파벳 순서로 7자 뒤의 문자로 모두 치환하는 예시이다(''a''는 ''h''로, 카이사르 암호의 변형).
POSIX를 준수하는 '''tr'''을 사용한다면, 마지막 두 단어는 a-z|a-z영어 h-za-g|h-za-g영어로 쓸 수 있다.
다음은 알파벳을 알파벳 순서로 한 글자 앞의 문자로 모두 치환하는 예시이다(''a''는 ''z''로).
POSIX와 호환되지 않는 이전 '''tr'''에서는 문자의 범위를 지정하려면 대괄호로 묶어야 하며, 셸이 해석하는 것을 방지하기 위해 인용 부호로 묶어야 했다.
어느 버전이 호출되는지 알 수 없는 경우, 범위 지정을 하지 않고 모든 문자를 나열해야 하는 경우도 있다. ROT13의 경우 tr "[A-M][N-Z][a-m][n-z]" "[N-Z][A-M][n-z][a-m]" 과 같이 사용할 수 있는데, 이는 대괄호가 두 문자 집합의 같은 위치에 있기 때문에 치환되어도 변하지 않으며, POSIX의 '''tr'''이 대괄호를 해석하지 않는다는 점은 변함이 없기 때문이다.
5. 1. 다른 프로그래밍 언어와의 비교
루비와 펄에도 비슷하게 작동하는 내부 `tr` 연산자가 있다.[7][8] Tcl의 `string map` 명령어는 문자에서 문자로 매핑하는 `tr`과 달리 문자열을 문자열에 매핑한다는 점에서 더 일반적이다.[9]루비와 펄에도 `tr` 연산자(메서드)가 있으며, 비슷한 역할을 한다. 예를 들어, 일본어를 처리할 수 있는 Perl을 사용하면 다음 Perl 스크립트는 히라가나와 가타카나를 교환한다. (단, "ヴ", "ヵ", "ヶ" 제외.)
tr/ぁ-んァ-ン/ァ-ンぁ-ん/;
tr/ゝゞヽヾ/ヽヾゝゞ/;
5. 2. 카이사르 암호 예시
다음은 알파벳을 알파벳 순서로 7자 뒤의 문자로 모두 치환하는 예시이다(''a''는 ''h''로, 카이사르 암호의 변형).```text
$ echo cheer | tr abcdefghijklmnopqrstuvwxyz hijklmnopqrstuvwxyzabcdefg
'''jolly'''
```
사용하고 있는 '''tr'''이 만약 POSIX를 준수한다면, 마지막 두 단어는 단순히 a-z|a-z영어 h-za-g|h-za-g영어로 쓸 수 있다.
다음은 알파벳을 알파벳 순서로 한 글자 앞의 문자로 모두 치환하는 예시이다(''a''는 ''z''로).
```text
$ echo "ibm 9000" >computer.txt
$ tr a-z za-y
'''hal 9000'''
```
POSIX와 호환되지 않는 이전 '''tr'''에서는 문자의 범위를 지정하려면 대괄호로 묶어야 하며, 셸이 해석하는 것을 방지하기 위해 인용 부호로 묶어야 한다.
```text
$ tr "[a-z]" "z[a-y]"
```
어느 버전이 호출되는지 알 수 없는 경우, 이 예에서는 범위 지정을 하지 않고 모든 문자를 나열해야 한다(tr abcdefghijklmnopqrstuvwxyz zabcdefghijklmnopqrstuvwxy|tr abcdefghijklmnopqrstuvwxyz zabcdefghijklmnopqrstuvwxy영어). 사용법에 따라 이전 표기법으로 충분한 경우도 있다. 예를 들어, ROT13은 tr "[A-M][N-Z][a-m][n-z]" "[N-Z][A-M][n-z][a-m]" 이 되며, 최신 버전에서도 문제없이 작동한다. 이는 대괄호가 두 문자 집합의 같은 위치에 있기 때문에 치환되어도 변하지 않기 때문이며, POSIX의 '''tr'''이 대괄호를 해석하지 않는다는 점은 변함이 없다.
참조
[1]
간행물
A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986
http://www.cs.dartmo[...]
[2]
웹사이트
Tr(1): Translate/Delete char - Linux man page
https://linux.die.ne[...]
[3]
웹사이트
Native Win32 ports of some GNU utilities
http://unxutils.sour[...]
[4]
서적
The OS-9 Guru - 1 : The Facts
Galactic Industrial Limited
[5]
문서
MSX-DOS2 Tools User's Manual by ASCII Corporation
https://archive.org/[...]
[6]
웹사이트
IBM System i Version 7.2 Programming Qshell
https://www.ibm.com/[...]
2020-09-05
[7]
웹사이트
tr (String) - APIdock
https://apidock.com/[...]
APIdock
2015-08-12
[8]
웹사이트
tr - perldoc.perl.org
https://perldoc.perl[...]
perldoc.perl.org
2015-08-12
[9]
웹사이트
Tcl Built-In Commands - string manual page
https://www.tcl.tk/m[...]
2015-08-12
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com