在 AWK 中检查大写,范围 [AZ] 不起作用

mik*_*ike 4 regex bash awk

我有以下 bash 脚本:

cat test | awk '/^[A-Z]/ {print NF}'
Run Code Online (Sandbox Code Playgroud)

假设测试内容如下:

This one yes
this one no
This one yes
this one no
Run Code Online (Sandbox Code Playgroud)

原则上它应该打印第一行和第三行的字段数,因为我正在寻找以大写字符开头的行。但是,结果是打印文件中所有行的字段数。如果我尝试使用相同的正则表达式 grep,结果就是我所期望的。

另外,如果我不写 [AZ],而是写 [[:upper:]] ,则脚本可以完美运行。

我的问题是:为什么在第一种情况下它不起作用?

Ed *_*ton 5

这是您的语言环境设置。谷歌语言环境。设置 LC_ALL=C 以获得一个通用的,但使用字符类是正确的方法。

  • 这可能不是根本原因。在我的盒子上,gawk 3.1.8 显示了 OP 的行为;gawk 4.0.1 显示了预期的行为。 (2认同)