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

6rqinv9w  于 2023-08-08  发布在  Perl
关注(0)|答案(2)|浏览(111)

只有当一行以@符号开始并且包含单个“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来做这个,更合适吗?

sf6xfgos

sf6xfgos1#

grep -P '(^|\s)\K@(?=\s).*?\sA\s' myzonefile.com

字符串

ehxuflar

ehxuflar2#

你是说像这样吗?

echo '
@            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"' |
mawk '$1$2 == "@A"' FS='([ \t]+[0-9]*[ \t]+IN)?[ \t]+'
@            IN     A       12.34.56.789

相关问题