我试图在Unix中实现类似于pcregrep -A1的功能,或者在Linux中实现类似于pcregrep -A1的功能,它找到与您的模式匹配的行以及它之后的下一行。
例如,我们说我们有这样的文字:
5000a72b30085ad3 0x4865 22 6 Gb/s SAS Yes No No No No
0 T/D 0 0 0x0 Path: pp0d.20.16
DISCOVER response: fffff602aa508550::print smp_discover_resp_t
5000a72b30085af7 0x4866 23 6 Gb/s SAS Yes No No No No
0 T/D 0 0 0x0 Path: pp0d.20.17
DISCOVER response: fffff602aa508738::print smp_discover_resp_t
0000000000000000 N/A 24 N/A None No No No No No
0 T/D 0 0 0x0 Path: pp0d.20.18
0000000000000000 N/A 25 N/A None No No No No No
我希望它能找到所有那些拥有有效WWN(不是0000000000000000)并且没有N / A的行,并且还在它之后返回该行:
5000a72b30085ad3 0x4865 22 6 Gb/s SAS Yes No No No No
0 T/D 0 0 0x0 Path: pp0d.20.16
5000a72b30085af7 0x4866 23 6 Gb/s SAS Yes No No No No
0 T/D 0 0 0x0 Path: pp0d.20.17
我可以将这条线与正确的WWN相匹配,但我不知道如何获得该线后......
提前感谢您的帮助!
答案 0 :(得分:2)
不漂亮,但有效:
^\s*(?!0{16})\w{16}\s(?:.(?!N\/A))*$\n.*
请注意!如果您需要捕获匹配项,请添加括号:
^\s(?!0{16})(\w{16}\s(?:.(?!N\/A))*$\n.*)
编辑:已更改为允许可选的初始空格。