Bash相当于Python';用于utf字符串转换的s字符串文字

Bash相当于Python';用于utf字符串转换的s字符串文字,python,bash,utf-8,Python,Bash,Utf 8,我正在编写一个bash脚本,它需要解析包含特殊字符(如@)的htmló。目前我正在运行整个脚本,它会忽略或触发这些查询,因为它们是以十进制unicode形式从服务器返回的,如下所示:'。我已经知道了如何解析和转换为十六进制,并将它们加载到python中,以将它们转换回它们的符号,我想知道bash是否能够以本机方式完成最终的转换。python中的简单示例: print ur"\u0032" ur"\u0033" ur"\u0040"

我正在编写一个bash脚本,它需要解析包含特殊字符(如
@)的htmló
。目前我正在运行整个脚本,它会忽略或触发这些查询,因为它们是以十进制unicode形式从服务器返回的,如下所示:
'。我已经知道了如何解析和转换为十六进制,并将它们加载到python中,以将它们转换回它们的符号,我想知道bash是否能够以本机方式完成最终的转换。python中的简单示例:

print ur"\u0032" ur"\u0033" ur"\u0040"
打印出来

23@
我可以在Bash中获得相同的结果吗?我已经研究过iconv,但我认为它不能满足我的需求,或者更可能的是,我只是不知道怎么做

以下是一些相关信息:

下面是一些预期投入产出的例子

路德维希·范·贝多芬-第五交响曲和第六交响曲''牧歌'' - 波士顿交响乐团-查尔斯·芒奇

路德维希·范·贝多芬-第五交响曲和第六交响曲《田园曲》-波士顿交响乐团-查尔斯·芒奇

和#1040лисА (阿里萨)Мы вместе. ХХ лет (我的vmeste XX let)

АцСА(Alisa)-М。(我的vmeste XX let)


可能的解决方案,例如:

$ function conv() { echo $* | python -c 'import re, sys; print re.sub(r"&#(\d+);", lambda x: unichr(int(x.group(1))), sys.stdin.read()).rstrip()' ; }
$ conv 'АлисА (Alisa)' 
АлисА (Alisa)

Bash中内置的
printf
不支持Unicode代码,但外部
printf
(至少在基于GNU的系统上)支持:

或者,如果路径不在
/usr/bin
中,则从路径中选择
printf

$ $(type -P printf) "\u0410\u043b\u0438\u0441\u0410"
АлисА


您不能从bash脚本调用python或perl来处理字符串?几乎可以做到:
echo'АлисА (Alisa)| perl-pe的/&#(\d+);(?{$x=sprintf(“%04x”,int($1))}/\N{U+$x}/g'
不幸的是,
$x
转换存在一些问题,因此unicode字符是错误的如果出现
UnicodeEncodeError
错误,请添加
重新加载(sys);系统设置默认编码(“UTF-8”)导入re后
系统谢谢!我对编程还是新手,我想知道调用python或其他语言是否会导致大量使用系统资源?@teratomata是的,速度很慢。例如,perl的启动比python要复杂得多。但我仍然比直接在bash(echo)中执行要慢Dennis Williamson:这比向某些python/perl/任何一行数据库发送字符串要好得多!我原以为它不会像我想象的那么难,但现在我正在研究python,它看起来非常有吸引力,更不用说有人已经制作了编码和解码html的模块。
$ $(type -P printf) "\u0410\u043b\u0438\u0441\u0410"
АлисА
$ env printf "\u0410\u043b\u0438\u0441\u0410"
АлисА