我想用十六进制转义码替换控制字符(ASCII 0-31)和空格(ASCII 32)。例如:
$ escape 'label=My Disc'
label=My\x20Disc
$ escape $'multi\nline\ttabbed string'
multi\x0Aline\x09tabbed\x20string
$ escape '\'
\\
就上下文而言,我正在编写一个状态为 DVD 驱动器的脚本。它的输出被设计为由另一个程序解析。我的想法是将每条信息打印为一个单独的空格分隔的单词。例如:
$ ./discStatus --monitor
/dev/dvd: no-disc
/dev/dvd: disc blank writable size=0 capacity=2015385600
/dev/dvd: disc not-blank not-writable size=2015385600 capacity=2015385600
我想将光盘的标签添加到此输出中。为了适应解析方案,我需要转义空格和换行符。我也可以做所有其他控制字符。
如果可能的话,我更愿意坚持使用 bash、sed、awk、tr 等。不过,我想不出一种真正优雅的方式来使用这些工具来做到这一点。如果基本的 shell 结构和工具没有好的解决方案,我愿意使用 perl 或 python。