awk 按我的预期打印 $2,但是当我将 $2 的值与它进行比较时 returns false

awk prints $2 to what I expect, but when I compare $2's value to same it returns false

当我给出以下命令时 -

ip -br -c addr show | awk '{print }'

它return类似于这个输出 -

UNKNOWN
UP
DOWN
UP
UP
UP
UP

但是当我只想打印 UP 的那些时,我说 -

ip -br -c addr show | awk ' == "UP"'

它没有 return 任何东西。 我已经将 awk 用于此类比较并且它有效,我想知道可能 -br 不是 return 可比较的字符串。还是我做错了什么。

使用您展示的示例,请尝试遵循 GNU grep 代码。

ip -br -c addr show | grep -oP '^\S+[^A-Z]+UP\D+.*?\K(\d+\.){3}\d+'

解释:简单的解释就是,运行ip -br -c addr show命令并将其输出作为标准输入发送到 grep 命令。在 GNU grep 代码中使用 oP 选项来仅打印匹配的值并启用 PCRE 正则表达式引擎。在主程序中提到正则表达式(其解释在下面添加)并且只打印匹配的部分。

正则表达式解释:

^\S+[^A-Z]+UP\D+.*? ##Matching non-spaces from starting of line followed by non-alphabets followed by UP followed by NON-DIGITS(1 or more occurrences) followed by a lazy match of next pattern.
\K                  ##\K will forget the previous matched value and will print only further mentioned regex value.
(\d+\.){3}\d+       ##Matching digits(1 or more occurrences) followed by a dot and matching this group 3 times followed by 1 or more occurrences of digits.

这是因为您使用 -c option:

告诉 ip 命令将颜色代码添加到输出中

-c[color][={always|auto|never}
        Configure color output.

删除 -cip -br addr show | awk ' == "UP"' 将起作用。

或者,您可以匹配绿色颜色代码:

ip -br -c addr show | awk  ' == "3[32mUP"'

输出:

该命令也打印颜色,您可以使用以下命令查看非打印字符:

ip -br -c addr show | cat -v

如果您想保留颜色,另一种选择是使用 index() 检查 UP

ip -br -c addr show | awk  'index(, "UP")'