"cat /dev/urandom | tr -dc "01"에서 "-dc"는 어떻게 작동합니까?

"cat /dev/urandom | tr -dc "01"에서 "-dc"는 어떻게 작동합니까?

내가 아는 한, 이 /dev/urandom파일은 특수 파일 중 하나이며 그 목적은 임의의 문자를 생성하는 것입니다. cat /dev/urandom이상한 문자가 연속 해서 실행되면 한자가 계속해서 표시되는 경우도 있습니다. 그러나 tr해당 옵션을 사용하여 이 이상한 문자 스트림을 파이프로 연결 하면 -dc0과 1의 임의 스트림 또는 tr -dc "setofcharacters".

tr에 대한 매뉴얼을 읽으려고 노력했지만 아래 및 아래에 -d내가 -c이해하지 못하거나 이해할 수 없는 설명이 있습니다.

   -c, -C, --complement
          use the complement of SET1

   -d, --delete
          delete characters in SET1, do not translate

누군가 이 단계별 논리를 친절하게 설명해 줄 수 있나요?cat /dev/urandom | tr -dc "01"

답변1

가장 큰 문제는 옵션 설명에서 "보충제"가 무엇을 의미하는지 이해하는 것이라고 생각합니다 -c. 집합론의 보수를 의미합니다. 읽어주세요.위키피디아에서:

집합 이론에서 집합 A의 여집합은 A에 속하지 않는 것(즉, A 밖에 있는 것)을 가리킵니다.

집합의 보수는 010과 1을 제외한 모든 문자를 나타냅니다. 따라서 이 -d옵션은 0도 1도 아닌 모든 문자를 제거합니다.

답변2

-d는 SET1의 모든 문자를 삭제한다는 의미이고, -c는 SET1의 "보완"을 사용한다는 의미입니다. 결합하면 SET1에 없는 모든 문자를 삭제한다는 의미입니다.

0과 1을 포함하는 문자 목록을 얻게 되며 tr -dc "01"은 목록 "01"에 없는 모든 문자를 제거하고 0과 1만 표시합니다.

답변3

보완 옵션은 단순히 제공한 세트의 역수를 제공합니다. 따라서 01을 지정하면 0 또는 1개의 ASCII 문자를 제외한 모든 항목에 영향을 미칩니다. 삭제 옵션은 선택한 세트를 삭제합니다. 따라서 입력에서 0 또는 1개의 ASCII 문자가 아닌 모든 항목을 삭제하면 됩니다.

이는 /dev/urandom 출력의 ASCII 문자일 뿐이지만 /dev/urandom 출력에 있는 모든 문자의 실제 이진 값을 나타내지는 않는다는 점을 이해하시기 바랍니다.

답변4

당신이 읽었다면TR 매뉴얼주의 깊게 살펴보면 이 명령을 쉽게 해석할 수 있습니다.

일반 형식:

tr [option]... set1 [set2]

당신의 명령으로 :

tr -dc "01"

set10및 을 포함합니다 1. -c옵션을 사용 하면 해당 보완 문자가 tr대체됩니다 . 이는 및를 제외한 모든 문자를 의미합니다 .set101

따라서 명령은 다음과 같이 해석될 수 있습니다.0과 1을 제외한 모든 문자를 제거합니다..

관련 정보