TR(1)

명칭
tr - 캐릭터의 치환

서식
tr [-csu] string1 string2
tr [-cu] -d string1
tr [-cu] -s string1
tr [-cu] -ds string1 string2

해설
tr 유틸리티는, 선택된 캐릭터를 옮겨놓아 또는 삭제하면서 표준 입력을 표준 출력에 카피합니다.

이하의 옵션을 이용할 수 있습니다:

-c  string1 에 포함되는 캐릭터의 여집합을 나타냅니다. 즉, ``-c ab''는, ``a''와 ``b''를 제외하는 모든 캐릭터를 포함합니다.

-d  -d 옵션은, 입력으로부터 지정한 캐릭터를 삭제합니다.

-s  -s 옵션은, 마지막 인수 ( string1 인가 string2 의 어느 쪽인지)에 포함되어 있는 동일한 캐릭터가, 입력안에 연속해 나타날 때, 그것을 1 개의 캐릭터에 압축합니다. 이 압축은, 모든 삭제나 변환이 끝났다 후에 행해집니다.

-u  -u 옵션은 출력이 버퍼링 되지 않는 것을 프로텍션합니다.

서식의 최초의 형식에서는, string1 에 포함되는 캐릭터는, string1 의 1 캐릭터눈은 string2 의 1 캐릭터눈과 치환...(와)과 같이 string2 (으)로 옮겨집니다. 만약 string1 하지만 string2 보다 긴 경우는, string2 의 마지막 캐릭터가, string1 (와)과 대응시키는데 부족한 분만큼 계속되고 있는 것으로 간주해집니다.

서식의 2 번째의 형식에서는, string1 에 포함되는 캐릭터는, 입력으로부터 삭제됩니다.

서식의 3 번째의 형식에서는, string1 에 포함되는 캐릭터는, -s 옵션의 해설대로에 압축됩니다.

서식의 4 번째의 형식에서는, string1 에 포함되는 캐릭터는 입력으로부터 삭제되어 string2 에 포함되는 캐릭터는 -s 옵션의 해설대로에 압축됩니다.

string1, string2 의 캐릭터의 집합을 지정하는데, 이하와 같은 기술 방법을 이용할 수 있습니다:

character
    이하로 가리킨 것을 제외하는, 그 캐릭터 자신을 나타낸다 통상의 캐릭터 (캐릭터)입니다.

\octal
    backslash에 계속되어, 1~3 자리수의 8 진수가 계속된 것은, 그 값을 encode 한 캐릭터를 표현합니다. 이 8 진수의 및 계속되어 숫자를 캐릭터로서 지정하고 싶은 경우에는, 8 진수의 줄이 3 자리수와 되도록(듯이), 8 진수의 상위자리수 (왼쪽)에 0 을 묻어 주세요.

\character
    backslash에 계속되는, 특정의 특수한 캐릭터는, 특수한 값에 대응하고 있습니다.

    \a | <벨 캐릭터>
    \b | <백 스페이스>
    \f | <form feed>
    \n | <개행>
    \r | <복귀>
    \t | <수평 탭>
    \v | <수직 탭>

    이것들 이외의 backslash에 계속되는 캐릭터는, 그 캐릭터 자신에게 대응합니다.

c-c 양단을 지정하는 것으로써, 캐릭터의 범위를 나타냅니다. 양단을 포함합니다.

[:class:]
    정의된 캐릭터 클래스에 속하는, 모든 캐릭터를 나타냅니다. 클래스명은 이하와 같습니다:

    alnum | <영숫자>
    alpha | <영문자>
    cntrl | <컨트롤 캐릭터>
    digit | <숫자>
    graph | <그래픽 캐릭터>
    lower | <영소문자>
    print | <표시 가능 캐릭터>
    punct | <구두점>
    space | <공백 캐릭터>
    upper | <영대 캐릭터>
    xdigit | <16 진수>

    ``upper''와 ``lower''를 제외한 클래스에서는, 클래스에 포함되는 캐릭터의 순서는 특정되고 있지 않습니다. ``upper''와 ``lower''에서는, 캐릭터는 승순에 줄지어 있습니다.

    어떠한 ASCII 캐릭터가, 이러한 클래스에 포함되어 있는가 하는 정보를 조사하고 싶은 경우에는, ctype(3) 및 관련 메뉴얼을 참조해 주세요.

[=equiv=]
    equiv (와)과 같은 동치 관계 클래스에 속하는 모든 캐릭터를 나타냅니다. 이것들은 encode치의 순서가 됩니다.

[#*n]
    # 그리고 지정되었다 n 개의 캐릭터의 반복을 표현합니다. 이 표현은, string2 그리고 지정되었을 때 마셔 유효합니다. 만약 n 하지만 생략 되었을 경우, 또는 0 의 경우는, string2 하지만 string1 의 길이를 채우는 것 같은, 충분히 큰 값으로 해서 해석됩니다. n (은)는, 0 으로 시작되는 경우에는 8 진수로서 그렇지 않은 경우에는 10 진수로서 해석됩니다.

환경 변수
LANG, LC_ALL, LC_CTYPE, LC_COLLATE 의 환경 변수가, environ(7) 의 기술 대로에, tr 의 실행에 영향을 줍니다.

진단

사용예
이하의 예는, 쉘에 대해서 주어진 것입니다:

file1 에 포함되는 단어 (캐릭터의 최대장의 줄)의 리스트를, 각 행에 대해 1 개씩 출력합니다.

    tr -cs [:alpha:] \n < file1

file1 의 내용을 대문자로 변환합니다.

    tr [:lower:] [:upper:] < file1

표시할 수 없는 캐릭터를 file1 로부터 삭제합니다.

    tr -cd [:print:] < file1

발음 구분 기호를, ‘e’ 의 엑센트 첨부 변형 모두로부터 삭제합니다.

    tr [=e=] e

호환성
옛부터의 BSD 의 실장 및 POSIX 표준에서는, 캐릭터의 범위 지정에는 ``c-c''라고 하는 문법을 이용합니다만, 낡은 System V 의 실장에서는 ``[c-c]''를 이용하고 있습니다. System V 의 셸 스크립트는, 캐릭터의 치환을 실시하려고 한다 경우에는 잘 동작할 것입니다. 즉, ``tr [a-z] [A-Z]''와 지정했을 경우에는, string1 의 ``[''가 string2 의 ``[''에 변환되기 (위해)때문에, 잘 동작합니다. 그러나, 셸 스크립트가, ``tr -d [a-z]''라고 하는 명령와 같이 캐릭터의 삭제나 압축을 실시하는 경우에는,``[''와 ``]''의 캐릭터가 삭제나 압축의 대상으로 포함되어 버립니다. 낡은 실장의 System V 에서는 이와 같이는 동작하지 않습니다. 게다가 ``a'', ``-'', ``z''와 말하는 3 개의 캐릭터를 표현하는데, ``a-z''와 기술하는 것 같은, 그 및 의존하고 있는 모든 스크립트는, ``a\-z''와 쓰기 고칠 필요가 있습니다.

tr 유틸리티는 옛부터, 입력에 있어서의 NUL 바이트의 조작을 금지되고 있었습니다. 게다가 입력으로부터 NUL 를 없애고 있었습니다. 이 실장에서는, 이 행동은 버그로 간주해져 삭제되었습니다.

tr 유틸리티는 옛부터, 예를 들어, 2 개의 캐릭터 라인이 지정되지 않는 한 -c 및 -s 옵션을 무시하는, 등의 문법상의 잘못을 극단적인까지 허락하고 있었습니다. 이 실장에서는, 부정한 문법은 용서되지 않게 되어 있을 것입니다.

표준
tr 유틸리티는, p1003.2 (와)과 호환입니다. string2 하지만 string1 보다 짧은 경우에 string2 의 마지막 캐릭터가 복제되는 기능은, POSIX 에서는 용서되고 있습니다만 필수는 아닌 것에 주의해 주세요. 다른 POSIX 시스템에의 가반성이 있는 셸 스크립트를 만들려고 한다면, 이 행동을 목표로 하지 않고 ,``[#*]''와 말하는 표현을 사용해야 합니다. -u 옵션은 p1003.2 표준의 확장입니다.