我的问题是关于正则表达式的。感谢regexr
,我设法写出一个表达式与 linux 命令给我的接口名称匹配route
。
但我无法抓住它:
route | grep -Eo "(?:((\w|\.|\*)+\s+)){7}([^ .]+[0-9]+)$"
这是为什么?
答案1
不同的程序(以及该程序的不同版本)可能使用不同的正则表达式实现。尝试逐部分减少或分解正则表达式,以了解哪些功能受支持/不受支持。
例如,我需要删除非捕获组说明符?:
,以便我的GNU grep可以在 Solaris 11 中按预期运行。
或者你可以尝试替换-E
为-P
使用Perl 正则表达式引擎对我来说,这让我GNU grep无需进一步修改即可运行你的正则表达式。
route | grep -Po "(?:((\w|\.|\*)+\s+)){7}([^ .]+[0-9]+)$"
笔记: GNU grep在 Solaris 11 中位于/usr/gnu/bin/grep