Awk中的非法模式

时间:2018-08-29 15:13:20

标签: awk

在awk中,我们可以通过多种方式来表达模式,例如G。作为用分隔符/.../括起来的正则表达式,或者是布尔表达式,其中非空值(字符串)或非零值(数字)为true。但是,我有这种模式,我想知道它的作用:

/test/p

它将打印所有行,无论其值为p还是提供了任何正则表达式。如何读取此模式?在文档中,我没有找到任何关于此的信息。我希望收到一条错误消息,例如缺少结尾的定界符。 (我知道这是sed的常用表达方式。)

1 个答案:

答案 0 :(得分:3)

/test/的计算结果为01,具体取决于当前记录(行)是否与正则表达式匹配。

该字符串与评估变量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"