用于替换所有不可打印字符的 Bash 命令?

Dav*_*795 4 bash non-ascii

我有一个 bash 脚本,用于检查数据库的更改并通过电子邮件将这些更改发送给我。工作得很好,直到它尝试发送不可打印的内容,这“破坏”了邮件。

有没有什么方便的方法如何用十六进制代码替换字符串中的所有不可打印字符(例如“ abc<1A>def<07>xyz ”)?

我能想到的只是一长串sed命令,每个命令都处理单个字符。这似乎不对。

编辑:发布这个问题后,我发现cat -v命令主要做我想做的事情。现在就使用这个,除非有人指出更好的东西。

tri*_*eee 5

您可以使用简单的替换,例如

perl -pe 's/([^[:print:]\n])/sprintf("<%02X>", ord($1))/ge'
Run Code Online (Sandbox Code Playgroud)

less命令的输出格式与您指定的非常相似,但它为我逐字打印示例字符串中的控制字符。也许你有更多的运气(我认为我的系统太现代了:-)。当输出不是到终端时,它不应该执行分页,因此当您从 crontab 运行它时,它应该只是通过(希望带有所需的替换)。