내가 아는 한, 이 /dev/urandom
파일은 특수 파일 중 하나이며 그 목적은 임의의 문자를 생성하는 것입니다. cat /dev/urandom
이상한 문자가 연속 해서 실행되면 한자가 계속해서 표시되는 경우도 있습니다. 그러나 tr
해당 옵션을 사용하여 이 이상한 문자 스트림을 파이프로 연결 하면 -dc
0과 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 밖에 있는 것)을 가리킵니다.
집합의 보수는 01
0과 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"
set1
0
및 을 포함합니다 1
. -c
옵션을 사용 하면 해당 보완 문자가 tr
대체됩니다 . 이는 및를 제외한 모든 문자를 의미합니다 .set1
0
1
따라서 명령은 다음과 같이 해석될 수 있습니다.0과 1을 제외한 모든 문자를 제거합니다..