Làm thế nào để tôi làm việc với một nhân vật bàn phím không thể nhận ra?


1

Tôi đang trong quá trình thực hiện một kịch bản bash để quét thời tiết.com để nhận báo cáo thời tiết. Tôi cần xử lý một dòng văn bản có một ký tự khác thường. Đây là văn bản:

30 ° Cao 35 ° Cao 52 ° Cao 45 ° Cao 43 ° Cao

Có một vòng tròn nhỏ giữa các con số và các chữ cái. Đây là mã:

#!/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

Điều này không cho đầu ra.


4
"Vòng tròn nhỏ" là một biểu tượng độ.

Làm thế nào để tôi nhận ra điều đó?
userend

Trông giống như một câu hỏi awk-phường.
Mehrdad

Câu trả lời:


1

Cách dễ nhất là sử dụng dấu chấm để khớp với biểu tượng độ.

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

Ví dụ

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

yes

(\ 0260 là bát phân cho ký hiệu độ trong câu hỏi của bạn)

Nếu bạn muốn khớp chính xác, bạn phải xác định giá trị của nó trong mã hóa được sử dụng. Trong văn bản trong câu hỏi của bạn, nó dường như là 0xb0.

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

 yes

\ 0260 và \ xb0 chỉ minh họa hai cách để chỉ ra điều tương tự.


Vâng, đây là những gì tôi cần. Tôi đoán regex của tôi đã tắt một chút.
userend

1

Shell Linux hiện đại rất dễ nhận biết Unicode. Trên thực tế, tôi nghĩ rằng tất cả các dữ liệu được coi là UTF-8.

Tôi không gặp vấn đề gì khi chạy mã này:

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

Nếu bạn đang tạo một tập lệnh shell, hãy đảm bảo rằng bạn có nó trong UTF-8 thay vì ASCII.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.