在awk中,我们可以通过多种方式来表达模式,例如G。作为用分隔符/.../
括起来的正则表达式,或者是布尔表达式,其中非空值(字符串)或非零值(数字)为true。但是,我有这种模式,我想知道它的作用:
/test/p
它将打印所有行,无论其值为p
还是提供了任何正则表达式。如何读取此模式?在文档中,我没有找到任何关于此的信息。我希望收到一条错误消息,例如缺少结尾的定界符。 (我知道这是sed的常用表达方式。)
答案 0 :(得分:3)
/test/
的计算结果为0
或1
,具体取决于当前记录(行)是否与正则表达式匹配。
该字符串与评估变量p
的结果(可能为空字符串)连接在一起。
因此,您最终遇到的条件是"0"
或"1"
,两者都是 true ,这意味着将执行默认操作{ print }
p
看起来像是正则表达式修饰符,这只是一个巧合;可以通过以下任何一种观察到相同的行为,它们都会产生一个非空字符串(假设p
为空):
/test/ p # concatenate 0 or 1 with empty variable
/test/ "" # concatenate 0 or 1 with empty string literal
0 p # "0"
0 "" # "0"