我正在尝试比较以 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)