所以我从printf
生成了这个输出 011010
现在我想管它并使用sed用unicode字符替换0和1,所以我打印的是unicode字符而不是二进制(011010)。
我可以这样做只是复制粘贴字符本身,但我想使用值,而不是像在unicode表中找到的那样:
Position: 0x2701
Decimal: 9985
Symbol: ✁
如何将上述值与sed一起使用来生成角色?
答案 0 :(得分:6)
使用bash(自v4.2起)或zsh,简单的解决方案是使用$'...'
语法,该语法理解包含\u
转义符的C转义:
$ echo 011010 | sed $'s/1/\u2701/g'
0✁✁0✁0
如果您有Gnu sed,则可以在s//
命令中使用转义序列。遗憾的是,Gnu sed
不理解\u
unicode转义,但它确实理解\x
十六进制转义。但是,要让它解码它们,您需要确保它看到反斜杠。然后你可以用UTF-8进行翻译,假设你知道对应于Unicode代码点的UTF-8序列:
$ # Quote the argument
$ echo 011010 | sed 's/1/\xE2\x9C\x81/g'
0✁✁0✁0
$ # Or escape the backslashes
$ echo 011010 | sed s/1/\\xE2\\x9C\\x81/g
0✁✁0✁0
$ # This doesn't work because the \ is removed by bash before sed sees it
$ echo 011010 | sed s/1/\xE2\x9C\x81/g
0xE2x9Cx81xE2x9Cx810xE2x9Cx810
$ # So that was the same as: sed s/1/xE2x9Cx81/g