ฉันจะทำงานกับอักขระแป้นพิมพ์ที่ไม่สามารถพิมพ์ได้ได้อย่างไร


1

ฉันอยู่ระหว่างการทำสคริปต์ทุบตีเพื่อขูด weather.com เพื่อรับรายงานสภาพอากาศ ฉันต้องการประมวลผลบรรทัดข้อความที่มีอักขระผิดปกติ นี่คือข้อความ:

30 ° FHigh 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

สิ่งนี้ไม่ให้ผลลัพธ์


4
"วงกลมเล็ก" เป็นสัญลักษณ์องศา

ฉันจะตกใจขนาดนั้นได้ยังไง?
userend

ดูเหมือนคำถามที่น่าสงสัย
Mehrdad

คำตอบ:


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 เป็นฐานแปดสำหรับสัญลักษณ์องศาในคำถามของคุณ)

หากคุณต้องการจับคู่ให้ตรงกันคุณต้องระบุว่าเป็นค่าในการเข้ารหัสที่ใช้ ในข้อความในคำถามของคุณดูเหมือนจะเป็น 0xb0

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

 yes

\ 0260 และ \ xb0 เพียงแสดงสองวิธีในการบ่งบอกสิ่งเดียวกัน


ใช่นี่คือสิ่งที่ฉันต้องการ ฉันคิดว่า regex ของฉันปิดตัวลงเล็กน้อย
userend

1

เชลล์ Linux สมัยใหม่เป็น Unicode ที่รับรู้มาก ในความเป็นจริงฉันคิดว่าข้อมูลทั้งหมดจะถือว่าเป็น UTF-8

ฉันไม่มีปัญหาในการเรียกใช้รหัสนี้:

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

หากคุณสร้างเชลล์สคริปต์ตรวจสอบให้แน่ใจว่าคุณมีเชลล์เป็น UTF-8 แทนที่จะเป็น ASCII

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.