首页 > 解决方案 > 在 UNIX 中替换文件末尾的十六进制分隔符和额外字符

问题描述

我在 UNIX 文件的每一行末尾都有不可打印的分隔符 ( ^\) 和 ( )。^^我想用可打印的分隔符替换不可打印的分隔符,|并删除每个文件末尾的字符。如何删除这些字符?

实际文件:

1^\MI^\IN^\123^\Y^^

预期输出:

1|MI|IN|123|Y

标签: unix

解决方案


我不清楚你的不可打印字符到底是什么,所以我假设你^用来表示字符 0x1c 和^^表示 0x1e。

你可以给八进制序列来tr翻译任意字符,所以如果你想删除 0x1e 并将 0x1c 转换为|,你可以这样做:

$ cat -v input
1^\MI^\IN^\123^\Y^^
$ xxd input
00000000: 311c 4d49 1c49 4e1c 3132 331c 591e 0a    1.MI.IN.123.Y..
$ < input tr -d '\036' | tr \\034 \| | cat -v
1|MI|IN|123|Y

推荐阅读