Awk编程:正则表达式、变量、数据转换与运算符详解
1. 正则表达式相关问题
在Awk中,正则表达式有着独特的使用规则和潜在问题。例如,以下两个条件判断是等价的:
if (/barfly/ || /camelot/)
print "found"
不过,有一个比较奇怪的规则后果。看下面的布尔表达式:
# Note that /foo/ is on the left of the ~
if (/foo/ ~ $1) print "found foo"
从表面看,这段代码是在测试 $1 是否匹配正则表达式 /foo/ 。但实际上,表达式 /foo/ ~ $1 真正的含义是 ($0 ~ /foo/) ~ $1 。也就是先将输入记录与正则表达式 /foo/ 进行匹配,匹配成功结果为1,失败为0,然后将这个结果与记录的第一个字段进行匹配。由于通常不会进行这样的测试,所以当gawk在程序中看到这种结构时会发出警告。
另外,赋值语句 matches = /foo/ 会根据当前输入记录的内容,将0或1赋值给变量 matches 。
常量正则表达式还会作为 gensub() 、 sub() 和
超级会员免费看
订阅专栏 解锁全文
1449

被折叠的 条评论
为什么被折叠?



