tr 명령

용도

문자 또는 문자 범위를 변환합니다.

구문

문자 또는 문자 시퀀스를 변환하려면 다음을 수행하십시오.

tr-c | -cds -cs | -C | -Cds | -Cs | -ds |  -s ] [  -A ] String1 String2

문자 또는 문자 시퀀스를 삭제하려면 다음을 수행하십시오.

tr { -cd -cs | -Cd | -Cs |  -d -s } [  -A ] String1

변경 시작특정 로케일에 대한 문자 범위를 정의하려면 다음을 수행하십시오. 변경 끝

변경 시작[LANG=ll_RR] tr  -L {c1-cn C1-Cn} {c1c2c3c4c5c6…cn C1C2C3C4C5C6…Cn}변경 끝

변경 시작사용자가 지정한 문자 범위를 삭제하려면 다음을 수행하십시오. 변경 끝

변경 시작[LANG=ll_RR] tr  -L {c1-cn C1-Cn}변경 끝

설명

tr 명령은 표준 입력의 문자를 삭제하거나 대체하여, 표준 출력에 그 결과를 기록합니다. tr 명령은 또한 특정 로케일에 대한 문자 범위를 정의합니다. tr 명령은 String1String2 변수에 따라 그리고 사용자가 지정한 플래그에 따라 다음 조작 유형을 수행합니다.

문자 변환

String1 String2가 모두 지정되고 -d 플래그가 지정되지 않은 경우, tr 명령은 표준 입력에서 String1에 들어 있는 각 문자를 String2에서 같은 위치에 있는 문자로 대체합니다.

-d 플래그를 사용하여 문자 삭제

-d 플래그가 지정되는 경우 tr 명령은 표준 입력에서 String1에 들어 있는 각 문자를 삭제합니다.

-s 플래그를 사용하여 순서 제거

-s 플래그가 지정되는 경우 tr 명령은 String1 또는 String2에서 표시되는 문자열의 모든 순서에 있는 첫 번째 문자를 제외한 모든 문자를 제거합니다. String1에서 표시되는 각 문자에 대해, tr 명령은 표준 출력에서 문자의 첫 번째 발생을 제외한 모두를 제거합니다. String2에서 표시되는 각 문자에 대해, tr 명령은 표준 출력에서 해당 문자의 발생 순서에서 첫 번째 발생을 제외한 모두를 제거합니다.

변경 시작현재 로케일 환경의 문자 범위 정의변경 끝

변경 시작tr 명령의 -L 플래그를 사용하여 특정 로케일, 코드 세트 및 사용자에 대한 문자 범위를 지정할 수 있습니다. tr 명령은 사용자가 지정한 문자 범위를 유지 및 인식합니다. tr 명령은 문자를 범위에서 맵핑된 문자로 변환하기 위해 이 정보를 사용합니다. -L 플래그와 함께 지정된 문자 범위 c1-cn은 문자 c1c2c3c4c5c6...cn에 맵핑되고, 지정된 문자 범위 C1-Cn은 문자 C1C2C3C4C5C6...Cn에 맵핑됩니다.변경 끝

문자열 표현을 위한 특별 순서

String1String2 변수에 들어 있는 문자열은 다음 규칙을 사용하여 표현할 수 있습니다.

항목 설명
C1-C2 C1에 의해 지정되는 문자와 C2에 의해 지정되는 문자(포함) 사이에서 조합되는 문자열을 지정합니다. C1에 의해 지정되는 문자가 C2에 의해 지정되는 문자 앞에 조합되어야 합니다.
참고: 현재 로케일이 이 메소드를 사용하여 부속 범위를 지정할 때 결과에 중대한 영향을 미칩니다. 명령이 로케일과 무관하게 일관된 결과를 제공해야 하는 경우 부속 범위 사용을 피해야 합니다.
[C*Number] NumberC에 의해 지정되는 문자의 반복 횟수를 지정하는 정수입니다. Number는 첫 번째 숫자가 0(이 경우 8진 정수로 간주됨)이 아닌 경우 10진수 정수로 간주됩니다.
[C*] C에 지정된 문자로 문자열을 채우십시오. 이 옵션은 String2 내에 있는 문자열의 끝에서만 사용되어 강제로 String2 내의 문자열이 String1 변수에 의해 지정되는 문자열과 같은 수의 문자를 갖게 합니다. *(별표) 뒤에 지정되는 모든 문자는 무시됩니다.
[ :ClassName: ] 현재 로케일에서 ClassName에서 이름 붙여진 문자 클래스의 모든 문자를 지정합니다. 클래스 이름은 다음 이름 중 하나일 수 있습니다.
alnum      lower
alpha      print
blank      punct
cntrl      space
digit      upper
graph      xdigit

[:lower:][:upper:] 변환 문자 클래스를 제외하고, 다른 문자 클래스에 의해 지정되는 문자는 배열에서 지정되지 않은 순서로 배치됩니다. 문자 클래스에 의해 지정되는 문자의 순서는 정의되지 않기 때문에, 해당 문자는 여러 문자를 하나에 맵핑하려는 경우에만 사용되어야 합니다. 이에 대한 예외는 변환 문자 클래스의 경우입니다.

문자 클래스에 대한 자세한 정보는 ctype 서브루틴을 참조하십시오.

[ =C= ] C에 의해 지정되는 문자와 동일한 등가 클래스를 갖는 모든 문자를 지정합니다.
\Octal 인코딩이 Octal에 의해 지정되는 8진 값으로 표시되는 문자를 지정합니다. 8진수 값은 1자리, 2자리 또는 3자리 8진수일 수 있습니다. NULL 문자는 '\0' 문자열을 사용하여 표현될 수 있으며, 다른 문자처럼 처리됩니다.
\ControlCharacter ControlCharacter에 의해 지정되는 값에 대응하는 제어 문자를 지정합니다. 다음 값이 표시될 수 있습니다.
\a
경고
\b
백스페이스
\f
용지 넘김
\n
줄 바꾸기
\r
캐리지 리턴(CR)
\t
\v
세로 탭
\\ 이스케이프 문자로서의 특별한 의미 없이 \(백슬래시)를 그 자체로 지정합니다.
\[ 특수 문자열 시퀀스로서의 시작 같은 특별한 의미 없이 [(왼쪽 대괄호)를 그 자체로 지정합니다.
\- 범위 구분 기호로서의 특별한 의미 없이 -(마이너스 부호)를 그 자체로 지정합니다.

문자가 String1에서 두 번 이상 지정되는 경우, 문자는 String1에서 문자의 마지막 발생에 대응하는 String2의 문자로 변환됩니다.

String1String2에 의해 지정되는 문자열이 같은 길이가 아닌 경우, tr 명령은 더 긴 문자열의 여분의 문자를 무시합니다.

플래그

항목 설명
-A 현재 로케일에 대한 배열 순서 대신 범위 및 문자 클래스에 대한 ASCII 배열 순서를 사용하는 바이트별 기초로 모든 조작을 수행합니다.
-C String1의 값이 String1에 의해 지정되는 문자열의 보수에 의해 대체되도록 지정합니다. String1의 보수는 String1에 의해 지정되는 문자를 제외하고 현재 로케일의 문자 세트에 있는 모든 문자입니다. -A-c 플래그가 모두 지정되는 경우 문자는 모든 8비트 문자 코드 세트에 관하여 보완됩니다. -c-s 플래그가 모두 지정되는 경우 -s 플래그가 String1의 보수에 있는 문자에 적용됩니다.

-d 옵션이 지정되지 않는 경우, String1에 의해 지정되는 문자의 보수가 LC_COLLATE의 현재 설정에 의해 정의되는 오름차순 배열 순서로 배열에 배치됩니다.

-c String1의 값이 String1에 의해 지정되는 문자열의 보수에 의해 대체되도록 지정합니다. String1의 보수는 String1에 의해 지정되는 문자를 제외하고 현재 로케일의 문자 세트에 있는 모든 문자입니다. -A-c 플래그가 모두 지정되는 경우 문자는 모든 8비트 문자 코드 세트에 관하여 보완됩니다. -c-s 플래그가 모두 지정되는 경우 -s 플래그가 String1의 보수에 있는 문자에 적용됩니다.

-d 옵션이 지정되지 않는 경우, String1에 지정된 값의 보수가 2진 값의 오름차순 순서로 배열에 배치됩니다.

-d 표준 입력에서 String1에 의해 지정된 문자열에 포함된 각 문자를 삭제합니다.
참고:
  1. -C 옵션이 -d 옵션과 함께 지정될 때 String1에 의해 지정되는 문자를 제외한 모든 문자가 삭제됩니다. -s 옵션도 지정되는 경우가 아니라면 String2의 컨텐츠는 무시됩니다.
  2. -c 옵션이 -d 옵션과 함께 지정되는 경우 String1에서 지정하는 것을 제외한 모든 값이 삭제됩니다. -s 옵션도 지정되는 경우가 아니라면 String2의 컨텐츠는 무시됩니다.
변경 시작-L변경 끝 변경 시작현재 로케일 환경에서 사용자 정의 문자 범위를 $HOME/.trregexrc/$CODESET 파일에 추가합니다. 문자 범위 c1-cnc1c2c3c4c5c6...cn에 맵핑되고, 문자 범위 C1-CnC1C2C3C4C5C6...Cn에 맵핑됩니다.

-L 플래그는 사용자별($HOME 변수에 따라), 코드 세트별 및 로케일별($LANG 변수에 따라)입니다. 이는 사용자가 특정 사용자, 코드 세트 및 로케일에 대한 문자 범위를 정의해야 함을 의미합니다. $HOME/.trregexrc/$CODESET 파일이 특정 사용자 또는 로케일에 대해 존재하지 않으면, -L 플래그를 지정할 때 파일이 자동으로 생성됩니다.

변경 끝
-s 반복되는 문자 시퀀스에서 첫 문자를 제외한 모두를 제거합니다. String1으로 지정되는 문자 시퀀스가 변환 전에 표준 입력에서 제거되며, String2에 의해 지정되는 문자 시퀀스가 표준 출력에서 제거됩니다.
String1 문자열을 지정합니다.
String2 문자열을 지정합니다.

종료 상태

이 명령은 다음 종료값을 리턴합니다.

0
모든 입력이 처리되었습니다.
>0
오류가 발생했습니다.

예제

  1. 중괄호를 소괄호로 변환하려면 다음 명령을 입력하십시오.
    tr '{}' '()' < textfile > newfile
    이 명령은 각 {(왼쪽 중괄호)를 ((왼쪽 소괄호)로, 각 }(오른쪽 중괄호)를 )(오른쪽 소괄호)로 변환합니다. 다른 모든 문자는 변경되지 않은 채로 있습니다.
  2. 중괄호를 대괄호로 변환하려면 다음 명령을 입력하십시오.
    tr '{}' '\[]' < textfile > newfile
    이 명령은 각 {(왼쪽 중괄호)를 [(왼쪽 대괄호)로, 각 }(오른쪽 중괄호)를 ](오른쪽 대괄호)로 변환합니다. 왼쪽 대괄호는 \(백슬래시) 이스케이프 문자와 함께 입력해야 합니다.
  3. 소문자를 대문자로 변환하려면 다음 명령을 입력하십시오.
    tr 'a-z' 'A-Z' < textfile > newfile
  4. 파일에서 단어 목록을 작성하려면 다음 명령을 입력하십시오.
    tr -cs '[:lower:][:upper:]' '[\n*]' < textfile > newfile
    이 명령은 소문자 및 대문자가 아닌 문자의 각 시퀀스를 단일 줄 바꾸기 문자로 변환합니다. *(별표)는 tr 명령이 줄 바꾸기 문자를 충분한 횟수만큼 반복하여 두 번째 문자열이 첫 번째 문자열만큼 길게 만듭니다.
  5. 파일에서 모든 NULL 문자를 삭제하려면 다음 명령을 입력하십시오.
    tr -d '\0' < textfile > newfile
  6. 하나 이상의 줄 바꾸기의 모든 시퀀스를 단일 줄 바꾸기로 대체하려면 다음 명령을 입력하십시오.
    tr -s '\n' < textfile > newfile
    또는
    tr -s '\012' < textfile > newfile
  7. 유효한 제어 문자 이외의 모든 인쇄 불가능 문자를 ?(물음표)로 대체하려면 다음을 입력하십시오.
    tr -c '[:print:][:cntrl:]' '[?*]' < textfile > newfile
    이 명령은 현재 로케일에서는 인쇄 가능한 문자가 아닌 문자를 찾기 위해 다른 로케일에서 작성된 파일을 스캔합니다.
  8. <space> 문자 클래스에 있는 문자의 모든 시퀀스를 단일 # 문자로 대체하려면 다음 명령을 입력하십시오.
    tr -s '[:space:]' '[#*]'
  9. 변경 시작특정 로케일에 대한 문자 범위를 정의하려면 다음 명령을 입력하십시오.
    LANG=ES_ES tr -L a-z A-Z abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
    이 명령은 ES_ES(Spanish_Spain) 로케일에 대해 a-z 및 A-Z 문자 범위를 정의합니다. 변경 끝
  10. 변경 시작특정 로케일에 대한 문자 범위를 삭제하려면 다음 명령을 입력하십시오.
    LANG=ES_ES tr -L a-z A-Z
    변경 끝