“树”命令使用漂亮的框绘图字符来显示树,但我想在“代码页中立”上下文中使用输出(我知道确实总是有一个代码页,但通过将其限制在较低的我希望可以免于担心乌兰巴托有人看到笑脸等)。
例如,而不是:
??? include
? ??? foo
? ??? bar
Run Code Online (Sandbox Code Playgroud)
我想要类似的东西:
+-- include
| +-- foo
| \-- bar
Run Code Online (Sandbox Code Playgroud)
但是我尝试过的“树”开关组合都没有给出这个(似乎更像是他们将框绘图字符作为基线并使其更漂亮)
我还寻找框绘图过滤器来执行此类转换,而没有找到任何超出无限 ASCII 艺术的东西:-)。一个通用的过滤器闻起来像是要在 15 分钟内煮熟的东西——再加上两天的增量天,绊倒所有有趣的角落案例:-)
哪个是将 ASCII 转换为二进制以及将二进制转换为 ASCII 的好工具?
我希望是这样的:
$ echo --binary "This is a binary message"
01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
Run Code Online (Sandbox Code Playgroud)
或者,更现实的:
$ echo "This is a binary message" | ascii2bin
01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
Run Code Online (Sandbox Code Playgroud)
还有相反的:
$ echo "01010100 01101000 01101001 01110011 00100000 …Run Code Online (Sandbox Code Playgroud) Unix / Linux EOL 是 LF、换行、ASCII 10、转义序列\n。
这是一个 Python 代码片段,可以准确地获得一个按键:
import sys, tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
Run Code Online (Sandbox Code Playgroud)
当我按下Enter键盘以响应此代码段时,它给出了\r回车符 ASCII 13。
在Windows 上,Enter发送CR LF == 13 10. *nix 不是 Windows;为什么Enter给 13 而不是 10?
单位分隔符 ASCII 字符(ASCII 31,八进制 37)在 Vim 中显示为^_. 但是如果我将相同的文件打印到终端,则该字符是不可见的。这会导致一行上的字段粘在一起:
# In Vim and less:
first field^_second field^_last field
# cat the same file to terminal:
cat delim.txt
first fieldsecond fieldlast field
# print 2nd field with awk
cat delim.txt | awk 'BEGIN {FS = "\037"} {print $2}'
second field
Run Code Online (Sandbox Code Playgroud)
我想我可以使用 cat -v 使单位分隔符可见:
cat -v delim.txt
first field^_second field^_last field
Run Code Online (Sandbox Code Playgroud)
但这比较麻烦。为什么在 Bash shell 中打印到标准输出时,单位分隔符没有可见的表示?我什至无法正确复制和粘贴 shell 输出;单元分离器在此过程中丢失。
我已经知道vim -b,但是,根据所使用的语言环境,它将多字节字符(如 UTF-8)显示为单个字母。
vim无论字符集如何,我如何要求只显示 ASCII 可打印字符,并将其余字符视为二进制数据?
我想使用以下命令输出所有 ascii 字符的字符串
for i in `seq 32 127`; do printf "%c" $i; done
Run Code Online (Sandbox Code Playgroud)
上面命令的输出是:
33333334444444444555555555566666666667777777777..............
Run Code Online (Sandbox Code Playgroud)
它是每个数字的第一个(从左边开始)数字。
浏览这个网站,我发现了我的问题的答案如何在 CLI 中打印所有可打印的 ASCII 字符?,但是我仍然不明白为什么我的原始代码段没有按预期输出 ascii 字符。
如何从一个文件中删除所有非 ascii 字符?是否有特定的命令来执行此操作?
grep --colour='auto' -P -n'[^\x00-\x7]' /usr/local/...
Run Code Online (Sandbox Code Playgroud)
我相信这会在工作流程中找到字符,但是我将如何删除相关字符的所有实例?
在 ASCII 表中存在“J”字符,它在不同的数字系统中具有代码点:
Oct Dec Hex Char
112 74 4A J
Run Code Online (Sandbox Code Playgroud)
可以通过打印
printf '\112'或echo $'\112'. 如何通过十进制和十六进制代码点表示打印相同的字符?
我知道 EOT 是 ASCII 码 4,而 EOF 被编码为 -1(至少在 C 中)。在我发现 EOF 映射到 -1 之前,我认为它只是 EOT 的同义词。为什么 EOF 映射到 -1 而不是 EOT?据我所知,它们都做同样的事情,即终止文件流。我能辨别的唯一区别是 EOT 还会终止 bash shell 中的命令。我想描述一下这两个代码之间的精确技术差异。