不同Linux机器上的相同shell命令会产生不同的输出

时间:2017-04-30 17:07:21

标签: linux shell

我在两台不同的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

如果我错过了诊断问题所需的任何重要系统/硬件详细信息,请告诉我。

1 个答案:

答案 0 :(得分:4)

没有ASCII 139这样的字符,因为ASCII只是7位。

您可能遇到了字符编码问题:脚本是使用编码A和它在编码B中处理的数据文件编写的,例如: ASCII或ISO8859与UTF-8。

通过查看环境变量LC_CTYPELC_ALL来检查这一点。确保脚本的编码与数据编码匹配。您可以使用

检查用于非ASCII字符的实际字节值
od -bc script
od -bc data

如果他们不使用相同的字节或字节序列,那就是它不起作用的原因。

您可能还想比较

的输出
locale

两台服务器都会产生。