据我所知,该/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 之外的事物)。
set 的补码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
。
因此,该命令可以解释为删除除零和一之外的所有字符。