오늘은 명령어에 대해 알아봤습니다 tr
.
-c
하지만 저는 와 의 차이점을 이해해 왔습니다 -C
.
사용 설명서는 다음과 같습니다.
-C Complement the set of characters in string1, that is ``-C ab'' includes every character except for `a' and `b'.
-c Same as -C but complement the set of values in string1.
set of values in string1
옵션이 무엇을 의미하는지 잘 모르겠습니다 -c
.
나는 그것이 문자열 1을 전체적으로 처리 "ab"
하고 단일 a
및 b
.
그래서 저는 다음과 같은 실험을 했습니다.
⇒ echo "ab_a_b" | tr -C 'ba' 'c'
abcacbc%
⇒ echo "ab_a_b" | tr -c 'ba' 'c'
abcacbc%
일이 예상대로 진행되지 않았습니다! 그렇다면
연출과 연출의 차이점은 무엇입니까?-C
-c
tr
소프트웨어 버전: OSX10.10의 BSD 2004
답변1
POSIX 매뉴얼에는 다음과 같이 나와 있습니다.
-C 옵션이 지정되면 string1(string1 피연산자에 실제로 지정된 문자를 제외하고 LC_CTYPE의 현재 설정에 의해 정의된 현재 문자 집합의 모든 문자 집합)에 지정된 문자의 보수가 배치됩니다. LC_COLLATE 정의의 현재 설정에 따라 오름차순으로 배열되어 배열됩니다.
-c 옵션이 지정되면 string1에 지정된 값의 보수가 이진값 오름차순으로 배열에 배치됩니다.
그리고 다음 설명을 포함하세요
ISO POSIX-2:1993 표준에는 -C 옵션처럼 작동하지만 POSIX.1-2008에 지정된 -c 옵션과 동일한 기능을 제공하지 않는 -c 옵션이 있습니다. 이는 C 로케일에서 바이트 값이 8진수 200에서 8진수 377이기 때문에 tr -cd\000-\177(가장 높은 비트가 설정된 모든 바이트를 제거함)을 지정할 수 있는 역사적 관행이 작동하지 않음을 의미합니다. 캐릭터가 아닙니다.
이러한 관점에서 이 -c
옵션을 사용하면 문자 자체를 사용하는 대신 ASCII 문자를 나타내는 숫자 값을 지정할 수 있습니다.
답변2
이 질문은 실제로 gnu tr이 아닌 BSD tr에 관한 것입니다.
BSD tr 사람들:
-C Complement the set of characters in string1, that is ``-C ab''
includes every character except for `a' and `b'.
-c Same as -C but complement the set of values in string1.
FreeBSD 8.2 October 13, 2006
GNU tr 사람들:
-c, -C, --complement
use the complement of SET1
나는 OSX 내장 도구가 BSD 버전이 될 것이라고 믿습니다.
[오타 수정, sed/tr]