如何处理无法输入的键盘字符?

如何处理无法输入的键盘字符?

我正在编写一个 bash 脚本来抓取 weather.com 以获取天气报告。我需要处理一行包含不寻常字符的文本。以下是文本:

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 是度数符号的八进制数)

如果要精确匹配,则必须在所使用的编码中识别其值。在问题文本中,它似乎是 0xb0。

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

 yes

\0260 和 \xb0 只是说明了表示同一件事的两种方式。

答案2

现代 Linux shell 非常支持 Unicode。事实上,我认为所有数据都被视为 UTF-8。

我运行此代码没有问题:

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

如果您正在编写 shell 脚本,请确保它采用 UTF-8 而不是 ASCII。

相关内容