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.
删除 -c
,ip -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")'
当我给出以下命令时 -
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.
删除 -c
,ip -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")'