나는 명령 -c
의 옵션이 말하는 내용에 따라 무엇을 하는지 이해하려고 노력합니다.tr
man tr
-c, -C, --complement SET1의 보완물 사용
그런데 의사가 무슨 말을 하는지 이해가 안 돼요."다시 채우다"그래서 이해를 돕기 위해 다음과 같은 예를 만들었습니다.
다음과 같은 파일을 만들었습니다 trance.txt
.
ILOVE YOU
I HATE YOU
i WANNA EAT APPLE PIE
난 달린다:tr -C A-Za-z "\n" < trance.txt
결과는 다음과 같습니다.
ILOVE
YOU
I
HATE
YOU
i
WANNA
EAT
APPLE
PIE
-c
그러나 나는 여전히 옵션이 실제로 무엇을 하는지 이해하지 못합니다 . 나에게 설명해 주실 수 있나요?
답변1
세트를 보수로 대체합니다 A-Za-z
.즉지정된 문자를 제외한 현재 문자 집합의 모든 문자입니다. 인용하다POSIX, 누락됨 -d
:
만약에-씨옵션이 지정되면 지정된 문자의 보완문자열 1(현재 설정에 정의된 대로 현재 문자 집합의 모든 문자 집합LC_CTYPE, 실제로 지정된 것을 제외하고문자열 1피연산자)는 현재 설정에 정의된 대로 오름차순 정렬 순서로 배열에 배치되어야 합니다.LC_COLLATE.
만약에-씨지정된 값의 보수로 구성된 옵션이 지정됩니다.문자열 1이진값의 오름차순으로 배열에 배치되어야 합니다.
따라서 귀하의 명령은 모든 문자를 대체합니다아니요AZ 또는 az에 개행 문자가 있습니다.
왜냐하면tr
일대일 문자표를 사용하여 바꾸기, 상황은 그렇게 간단하지 않습니다. "not in" 옵션 -c
뿐만 -C
아니라 옵션에 지정된 순서대로 주어진 세트에 없는 모든 문자 세트를 만듭니다. 이는 대상 세트에 여러 문자가 있는 경우에만 의미가 있습니다.