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 명령은 String1 및 String2 변수에 따라 그리고 사용자가 지정한 플래그에 따라 다음 조작 유형을 수행합니다.
문자 변환
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
에 맵핑됩니다.
문자열 표현을 위한 특별 순서
String1 및 String2 변수에 들어 있는 문자열은 다음 규칙을 사용하여 표현할 수 있습니다.
항목 | 설명 |
---|---|
C1-C2 | C1에 의해 지정되는 문자와 C2에
의해 지정되는 문자(포함) 사이에서 조합되는 문자열을
지정합니다. C1에 의해 지정되는 문자가 C2에
의해 지정되는 문자 앞에 조합되어야 합니다. 참고: 현재 로케일이
이 메소드를 사용하여 부속 범위를 지정할 때 결과에 중대한 영향을
미칩니다. 명령이 로케일과 무관하게 일관된 결과를 제공해야
하는 경우 부속 범위 사용을 피해야 합니다.
|
[C*Number] | Number는 C에 의해 지정되는 문자의 반복 횟수를 지정하는 정수입니다. Number는 첫 번째 숫자가 0(이 경우 8진 정수로 간주됨)이 아닌 경우 10진수 정수로 간주됩니다. |
[C*] | C에 지정된 문자로 문자열을 채우십시오. 이 옵션은 String2 내에 있는 문자열의 끝에서만 사용되어 강제로 String2 내의 문자열이 String1 변수에 의해 지정되는 문자열과 같은 수의 문자를 갖게 합니다. *(별표) 뒤에 지정되는 모든 문자는 무시됩니다. |
[ :ClassName: ] | 현재 로케일에서 ClassName에서 이름 붙여진 문자
클래스의 모든 문자를 지정합니다. 클래스 이름은 다음
이름 중 하나일 수 있습니다.
[: 문자 클래스에 대한 자세한 정보는 ctype 서브루틴을 참조하십시오. |
[ =C= ] | C에 의해 지정되는 문자와 동일한 등가 클래스를 갖는 모든 문자를 지정합니다. |
\Octal | 인코딩이 Octal에 의해 지정되는 8진 값으로 표시되는 문자를 지정합니다. 8진수 값은 1자리, 2자리 또는 3자리 8진수일 수 있습니다. NULL 문자는 '\0' 문자열을 사용하여 표현될 수 있으며, 다른 문자처럼 처리됩니다. |
\ControlCharacter | ControlCharacter에 의해 지정되는 값에
대응하는 제어 문자를 지정합니다. 다음 값이 표시될
수 있습니다.
|
\\ | 이스케이프 문자로서의 특별한 의미 없이 \(백슬래시)를 그 자체로 지정합니다. |
\[ | 특수 문자열 시퀀스로서의 시작 같은 특별한 의미 없이 [(왼쪽 대괄호)를 그 자체로 지정합니다. |
\- | 범위 구분 기호로서의 특별한 의미 없이 -(마이너스 부호)를 그 자체로 지정합니다. |
문자가 String1에서 두 번 이상 지정되는 경우, 문자는 String1에서 문자의 마지막 발생에 대응하는 String2의 문자로 변환됩니다.
String1 및 String2에 의해 지정되는 문자열이 같은 길이가 아닌 경우, 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에 의해 지정된 문자열에
포함된 각 문자를 삭제합니다. 참고:
|
-L | 현재 로케일 환경에서 사용자 정의 문자 범위를
$HOME/.trregexrc/$CODESET 파일에 추가합니다. 문자 범위
c1-cn 은 c1c2c3c4c5c6...cn 에 맵핑되고, 문자 범위
C1-Cn 은 C1C2C3C4C5C6...Cn 에 맵핑됩니다. -L 플래그는 사용자별($HOME 변수에 따라), 코드 세트별 및 로케일별($LANG 변수에 따라)입니다. 이는 사용자가 특정 사용자, 코드 세트 및 로케일에 대한 문자 범위를 정의해야 함을 의미합니다. $HOME/.trregexrc/$CODESET 파일이 특정 사용자 또는 로케일에 대해 존재하지 않으면, -L 플래그를 지정할 때 파일이 자동으로 생성됩니다. |
-s | 반복되는 문자 시퀀스에서 첫 문자를 제외한 모두를 제거합니다. String1으로 지정되는 문자 시퀀스가 변환 전에 표준 입력에서 제거되며, String2에 의해 지정되는 문자 시퀀스가 표준 출력에서 제거됩니다. |
String1 | 문자열을 지정합니다. |
String2 | 문자열을 지정합니다. |
종료 상태
이 명령은 다음 종료값을 리턴합니다.
- 0
- 모든 입력이 처리되었습니다.
- >0
- 오류가 발생했습니다.
예제
- 중괄호를 소괄호로 변환하려면 다음 명령을 입력하십시오.
이 명령은 각 {(왼쪽 중괄호)를 ((왼쪽 소괄호)로, 각 }(오른쪽 중괄호)를 )(오른쪽 소괄호)로 변환합니다. 다른 모든 문자는 변경되지 않은 채로 있습니다.tr '{}' '()' < textfile > newfile
- 중괄호를 대괄호로 변환하려면 다음 명령을 입력하십시오.
이 명령은 각 {(왼쪽 중괄호)를 [(왼쪽 대괄호)로, 각 }(오른쪽 중괄호)를 ](오른쪽 대괄호)로 변환합니다. 왼쪽 대괄호는 \(백슬래시) 이스케이프 문자와 함께 입력해야 합니다.tr '{}' '\[]' < textfile > newfile
- 소문자를 대문자로 변환하려면 다음 명령을 입력하십시오.
tr 'a-z' 'A-Z' < textfile > newfile
- 파일에서 단어 목록을 작성하려면 다음 명령을 입력하십시오.
이 명령은 소문자 및 대문자가 아닌 문자의 각 시퀀스를 단일 줄 바꾸기 문자로 변환합니다. *(별표)는 tr 명령이 줄 바꾸기 문자를 충분한 횟수만큼 반복하여 두 번째 문자열이 첫 번째 문자열만큼 길게 만듭니다.tr -cs '[:lower:][:upper:]' '[\n*]' < textfile > newfile
- 파일에서 모든 NULL 문자를 삭제하려면 다음 명령을 입력하십시오.
tr -d '\0' < textfile > newfile
- 하나 이상의 줄 바꾸기의 모든 시퀀스를 단일 줄 바꾸기로 대체하려면 다음 명령을
입력하십시오.
또는tr -s '\n' < textfile > newfile
tr -s '\012' < textfile > newfile
- 유효한 제어 문자 이외의 모든 인쇄 불가능 문자를 ?(물음표)로 대체하려면
다음을 입력하십시오.
이 명령은 현재 로케일에서는 인쇄 가능한 문자가 아닌 문자를 찾기 위해 다른 로케일에서 작성된 파일을 스캔합니다.tr -c '[:print:][:cntrl:]' '[?*]' < textfile > newfile
- <space> 문자 클래스에 있는 문자의 모든 시퀀스를 단일 #
문자로 대체하려면 다음 명령을 입력하십시오.
tr -s '[:space:]' '[#*]'
- 특정 로케일에 대한 문자 범위를 정의하려면 다음 명령을
입력하십시오.
이 명령은LANG=ES_ES tr -L a-z A-Z abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
ES_ES
(Spanish_Spain) 로케일에 대해 a-z 및 A-Z 문자 범위를 정의합니다. - 특정 로케일에 대한 문자 범위를 삭제하려면 다음 명령을
입력하십시오.
LANG=ES_ES tr -L a-z A-Z