Perl Regex 如何捕获组之间的两种模式

问题描述 投票:0回答:1

仅当一行以@符号开头并且还包含一个“A”字符时,我才需要匹配该行。尝试使用 grep -P 方法来实现此目的。

区域文件片段:

@            IN     SOA     some.bogus.com hostmaster.bogus.com. (
@            IN     A       12.34.56.789
             IN     A       012.345.678.9
@     1800   IN     AAAA    789237:mou68:028n:0000:8afn:
@            IN     NS      ns500.mydummy.server.
@            IN     TXT     "v=spf1 mx ~all"

使用

grep -P "(^|\s)\K@(?=\s|$)" myzonefile.com
获取带有@符号的行就好了,但是如何修改它以获取带有@符号和单个“A”字符的行?

这个

grep -P '(?=.*@)(?=.*A)' myzonefile.com
得到了第二行,这是正确的,但也得到了SOA行,这是我不想要的。

这个

grep -E '\b[A]\s' myzonefile.com
只获取所有带有单个“A”字符的行,但我无法包含 AND 操作来也匹配 @ 符号,而无需管道到另一个 grep。所以不是一个选择。

我应该使用 sed 还是 awk 更适合?

regex perl grep
1个回答
0
投票
grep -P '(^|\s)\K@(?=\s).*?\sA\s' myzonefile.com
© www.soinside.com 2019 - 2024. All rights reserved.