"regular expression compile failed (missing operand)" 检查星号时 AWK 中的问题

"regular expression compile failed (missing operand)" issue in AWK when checking for an asterisk

我正在尝试为自己创建一些有用的别名,并正在尝试找到一种查看当前 Kubernetes 上下文命名空间的方法。

k config get-contexts

CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
 *        kubernetes-test@kubernetes2   kubernetes2  kubernetes-test    test
          kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   default

我只想输出'test',所以我试了:

k config get-contexts | awk '/*/{print }'

得到的错误:

awk: line 1: regular expression compile failed (missing operand)

首先,正则表达式中的*是一个量词,意思是“零次或多次出现”。既然是正则元字符,应该转义,\*:

k config get-contexts | awk '/\*/{print }'

但是,由于您正在寻找固定字符串而不是模式,因此您可以使用 index:

k config get-contexts | awk 'index([=11=], "*") {print }'

如果在“记录”(行)内的任何地方找到 *,第五个字段将被 printed。

您收到该错误消息是因为 * 是一个正则表达式重复元字符,因此将其用作正则表达式中的第一个字符是未定义的行为,因为它之前没有任何内容可以重复。当您显然想要的是完整的字符串匹配时,您还使用了部分行正则表达式匹配(请参阅 了解不同之处):

k config get-contexts | awk '=="*"{ print  }'