我在两台不同的Linux机器上有一个shell脚本,它运行以下命令:
sed 's/ïí/`/g' $inputfile > $outputfile
应该采用输入文本文件,并生成一个输出文件,其中所有实例的ïí(ASC139 + ASC161)都替换为反引号字符。该命令在server1上完美运行,但在server2上没有做任何事情。可能是什么原因并可能解决这个问题?
以下是有关每台服务器的一些详细信息。
服务器1
***run cmd 'uname -a'***
Linux <servername> 3.10.0-229.el7.x86_64 #1 SMP Thu Jan 29 18:37:38 EST 2015 x86_64 x86_64 x86_64 GNU/Linux
***run cmd 'lsb_release -a'***
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: RedHatEnterpriseServer
Description: Red Hat Enterprise Linux Server release 7.1 (Maipo)
Release: 7.1
Codename: Maipo
服务器2
***run cmd 'uname -a'***
Linux <servername> 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64 x86_64 x86_64 GNU/Linux
***run cmd 'lsb_release -a'***
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
Distributor ID: RedHatEnterpriseServer
Description: Red Hat Enterprise Linux Server release 6.5 (Santiago)
Release: 6.5
Codename: Santiago
如果我错过了诊断问题所需的任何重要系统/硬件详细信息,请告诉我。
答案 0 :(得分:4)
没有ASCII 139这样的字符,因为ASCII只是7位。
您可能遇到了字符编码问题:脚本是使用编码A和它在编码B中处理的数据文件编写的,例如: ASCII或ISO8859与UTF-8。
通过查看环境变量LC_CTYPE
或LC_ALL
来检查这一点。确保脚本的编码与数据编码匹配。您可以使用
od -bc script
od -bc data
如果他们不使用相同的字节或字节序列,那就是它不起作用的原因。
您可能还想比较
的输出locale
两台服务器都会产生。