【问题标题】:Same shell command on different Linux machines produces different output不同 Linux 机器上的相同 shell 命令产生不同的输出
【发布时间】:2017-04-30 17:07:20
【问题描述】:

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

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

【问题讨论】:

    标签: linux shell


    【解决方案1】:

    没有像ASCII139这样的字符,因为ASCII只有7位。

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

    通过查看环境变量LC_CTYPELC_ALL 进行检查。确保您的脚本编码与数据编码相匹配。您可以检查用于非 ASCII 字符的实际字节值

    od -bc script
    od -bc data
    

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

    您可能还想比较

    的输出
    locale
    

    两台服务器都生产。

    【讨论】:

      猜你喜欢
      • 2015-01-08
      • 2023-01-25
      • 2020-06-09
      • 1970-01-01
      • 2017-05-01
      • 2013-12-05
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      相关资源
      最近更新 更多