AWK忽略了字符类中的大小写

时间:2011-04-06 17:00:45

标签: awk

我想写一个awk条件,匹配一个字符串,如果它以大写字母开头。这是一个示例数据文件。

a
b
c
A
B
C
d
e

假设我想匹配匹配字符ABC的所有行。

awk '{ if ($1 ~ /^[ABC]/) print }' test 
A
B
C

够容易。但是如果我使用字符类,这不起作用。案例被忽略。

awk '{ if ($1 ~ /^[A-C]/) print }' test 
b
c
A
B
C

有趣的是,这有效:

awk '{ if ($0 ~ /^[[:upper:]]/) print }' < test
A
B
C

从文档中,我希望命令是:

awk '{ if ($0 ~ /^[:upper:]/) print }' < test

我误解了什么?具体来说,为什么[A-C]不区分大小写,为什么我需要写[[:upper:]]而不是[:upper:]

echo $LANG
en_US.utf8

1 个答案:

答案 0 :(得分:2)

  

我误解了什么?   具体来说,为什么是[A-C]案例   不敏感的

这可能与您的语言环境有关,这可能会影响字符类范围。

尝试设置export LC_ALL=C然后再次使用awk

运行[A-C]命令
  

为什么我需要写[[:upper:]]   而不是[:upper:]?

[:upper:]基本上是编写范围 A-Z的区域设置不敏感的方式,但您也希望它是一个字符类,因此您将其包装在{{1}中因此[]。因此,例如,如果您想匹配所有大写字母和数字,您可以编写[[:upper:]]