比较不同编码的字符串

比较不同编码的字符串

我正在尝试比较以 UTF8 编码的文件中的字符串

file /dev/eeprom: UTF-8 Unicode text, with very long lines

带有硬编码到脚本中的序列号。打印到控制台时,字符串显示得很好,但文件格式似乎有问题(尽管 iconv 不可用)。如果文件输出正确,则该脚本是 ASCII 文本可执行文件。

#!/bin/sh
eeprom_id=$(cat /dev/eeprom | grep -e ID: | awk '{split($0,a,":"); print a[2]}')
echo "EEPROM_ID: $eeprom_id"

if [ $eeprom_id == "C000139-102" ]
then
    echo "String identical"
else
    echo "WRONG"
fi

输出:

.script.sh
EEPROM_ID: C000139-102
WRONG

有什么想法如何正确比较这些字符串吗?

答案1

应该可以完全做到这一点awk

awk -F':' -v ref_id="C000139-102" '$1=="ID" {if ($2==ref_id) print "Identical"; else print "WRONG"}' /dev/eeprom

要将 ID 读出到 shell 变量中,如示例脚本中所示:

eeprom_id=$(awk -F':' '$1=="ID" {print $2}')

如果,正如 @user414777 怀疑的那样,您正在处理 UTF-16 编码的文件,您可能必须使用

cat /dev/eeprom | tr -d '\0' | awk -F':' -v ref_id="C000139-102" '$1=="ID" {if ($2==ref_id) print "Identical"; else print "WRONG"}'

或尝试

awk -F':' -v ref_id="C000139-102" '{gsub(/\x00/,""); if ($1=="ID") {if ($2==ref_id) print "Identical"; else print "WRONG"}}' /dev/eeprom

再次将 ID 读入 shell 变量:

eeprom_id=$(cat /dev/eeprom | tr -d '\0' | awk -F':' '$1=="ID" {print $2}')

或者

eeprom_id=$(awk -F':' '{gsub(/\x00/,""); if ($1=="ID") print $2}' /dev/eeprom)

相关内容