![다양한 인코딩의 문자열 비교](https://linux55.com/image/180688/%EB%8B%A4%EC%96%91%ED%95%9C%20%EC%9D%B8%EC%BD%94%EB%94%A9%EC%9D%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%EB%B9%84%EA%B5%90.png)
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를 쉘 변수로 읽으려면 다음을 수행하십시오.
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)