AWK忽略字符类中的大小写

AWK忽略字符类中的大小写,awk,Awk,如果字符串以大写字母开头,我想编写一个与字符串匹配的awk条件。这是一个示例数据文件 a b c A B C d e 假设我想匹配所有与ABC字符匹配的行 awk '{ if ($1 ~ /^[ABC]/) print }' test A B C 很简单。但是如果我使用character类,这不起作用。这个案子被忽略了 awk '{ if ($1 ~ /^[A-C]/) print }' test b c A B C 有趣的是: awk '{ if ($0 ~ /^[[:upper:]

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

a
b
c
A
B
C
d
e
假设我想匹配所有与ABC字符匹配的行

awk '{ if ($1 ~ /^[ABC]/) print }' test 
A
B
C
很简单。但是如果我使用character类,这不起作用。这个案子被忽略了

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

awk '{ if ($0 ~ /^[[:upper:]]/) print }' < test
A
B
C
我误解了什么? 具体来说,[A-C]的情况为何 麻木不仁

这可能与可能影响字符类范围的区域设置有关

尝试设置
export LC\u ALL=C
,然后使用
[A-C]
再次运行
awk
命令

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


[:upper:][/code>基本上是一种不区分区域设置的写入范围
a-Z
的方法,但您也希望它是一个字符类,因此将其包装在
[]
中,因此
[:upper:][]
。例如,如果你想匹配所有的大写字符和数字,你可以写
[:upper:[:digit:][]

,我看不到你的结果。您的
LANG
环境变量包含什么?从gawk手册页:字符类仅在字符列表括号内的正则表达式中有效。我可能理解您的意思。我需要
[[A-C]]
<代码>awk{if($0~/^[[A-C]]]/)print}测试
给出0个结果。gawk也一样。不。假设你想搜索一个十六进制数字,你可以说
/[:digit:]a-fA-F]/
--所以
[:character\u class:///code>在外部的
[括号]
中,就像普通字符gotcha一样,我很困惑,因为有时候
[a-C]
被称为字符类(也就是说,
[man-awk
的一些版本)但不是在
人呆呆地看
!这很有道理(re:[:upper:]),但是你能解释一下为什么
awk'{if($0~/^[:upper://)print}
只返回
e
?是的,这是一个局部问题<代码>导出LC_ALL=C
显示了预期输出。谢谢你的提示@施密德,这个
[:upper://code>与这个
[epru://code>完全相同--括号中包含一组您想要匹配的字符。
awk '{ if ($0 ~ /^[:upper:]/) print }' < test
echo $LANG
en_US.utf8