比較不同編碼的字串

比較不同編碼的字串

我正在嘗試比較以 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)

相關內容