인코딩이 다른 문자열 비교
Sep 25 2020
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
그 문자열을 올바르게 비교하는 방법에 대한 아이디어가 있습니까?
답변
AdminBee Sep 25 2020 at 14:52
다음에서이 작업을 완전히 수행 할 수 있습니다 awk.
awk -F':' -v ref_id="C000139-102" '$1=="ID" {if ($2==ref_id) print "Identical"; else print "WRONG"}' /dev/eeprom
예제 스크립트 에서처럼 ID를 쉘 변수로 읽으려면 다음을 수행하십시오.
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를 쉘 변수로 읽으려면 다음을 수행하십시오.
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)