
일기 예보를 얻기 위해 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로 작성했는지 확인하십시오.