입력할 수 없는 키보드 문자를 사용하려면 어떻게 해야 합니까?

입력할 수 없는 키보드 문자를 사용하려면 어떻게 해야 합니까?

일기 예보를 얻기 위해 Weather.com을 긁는 bash 스크립트를 만드는 중입니다. 특이한 문자가 있는 텍스트 줄을 처리해야 합니다. 텍스트는 다음과 같습니다.

30°F높음 35°높음 52°높음 45°높음 43°높음

숫자와 문자 사이에 작은 원이 있습니다. 코드는 다음과 같습니다.

#!/bin/bash

clear

lynx --dump http://www.weather.com/weather/5-day/New+York+NY+10001 | \
egrep '   Today |   Tonight ' -A 22 | awk 'BEGIN {print "\n\t\t\b\b\b\b\b\bTHE FIVE DAY\
WEATHER REPORT FOR THE NYC: 10001\n"} \
/[0-9][0-9]*[a-z|A-Z]+/{print $1"\t\t"$2" "$3"\t\t"$4" "$5"\n"}' 2>> error.txt

이것은 출력을 제공하지 않습니다.

답변1

가장 쉬운 방법은 점을 사용하여 도 기호를 일치시키는 것입니다.

/[0-9][0-9]*.[a-z|A-Z]+/

예를 들어

$ echo -e "30\0260FHigh" \
| awk '/[0-9][0-9]*.[a-z|A-Z]+/ { print "yes" }'

yes

(\0260은 질문의 도 기호에 대해 8진수입니다)

정확하게 일치시키려면 사용된 인코딩에서 해당 값을 식별해야 합니다. 귀하의 질문에 있는 텍스트에서는 0xb0인 것 같습니다.

 $ echo -e "30\0260FHigh" \
 | awk '/[0-9][0-9]*\xb0[a-z|A-Z]+/ {print "yes" }'

 yes

\0260과 \xb0은 동일한 것을 나타내는 두 가지 방법을 보여줍니다.

답변2

최신 Linux 셸은 유니코드를 매우 잘 인식합니다. 사실 모든 데이터가 UTF-8로 처리되는 것 같아요.

이 코드를 실행하는 데 아무런 문제가 없었습니다.

$ echo ° | awk '/°/{print "found it"}'
found it

쉘 스크립트를 작성하는 경우 ASCII 대신 UTF-8로 작성했는지 확인하십시오.

관련 정보