"tr" 명령에서 "-C"와 "-c"의 차이점은 무엇입니까?

"tr" 명령에서 "-C"와 "-c"의 차이점은 무엇입니까?

오늘은 명령어에 대해 알아봤습니다 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"하고 단일 ab.
그래서 저는 다음과 같은 실험을 했습니다.

⇒  echo "ab_a_b" | tr -C 'ba' 'c'
abcacbc%                                                                                                                                                                             
⇒  echo "ab_a_b" | tr -c 'ba' 'c'
abcacbc%

일이 예상대로 진행되지 않았습니다! 그렇다면
연출과 연출의 차이점은 무엇입니까?-C-ctr


소프트웨어 버전: 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]

관련 정보