AWK忽略字符类中的大小写
如果字符串以大写字母开头,我想编写一个与字符串匹配的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:]
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