如何从转发文件中获取本地域列表?
例如/etc/exim4/forwards
:
[email protected]: [email protected]
# ignore this line
[email protected]: [email protected]
[email protected]: [email protected]
这里是字符串扩展(或者不管它叫什么G) 应该返回test.com : hugo.com
。
readfile
我认为它可以用和来完成map
,但我无法让它工作。
答案1
我有件事几乎按照您想要的方式工作。此扩展的作用是:
- 在文件中查找,使用;作为分隔符。
- 排除任何带有 # 的行(即注释)。
- 它应该跳过空行,但我的正则表达式不匹配,它仍然包含那些空行,所以我只是将其删除并将或{{}{}} 块留在其中。
- 提取每行 : 之前的项目,并从中提取域。
- 将所有内容汇总到列表中。
我并不声称这正是您所需要的,但它展示了如何解析和 grep 列表。
CentOS58[root@ivwm41 exim]# more test_list.cf
[email protected]: [email protected]
# ignore this line
[email protected]: [email protected]
[email protected]: [email protected]
CentOS58[root@ivwm41 exim]# exim -be '${reduce {<; ${readfile{/etc/exim/test_list.cf}{;}} } {} {${if or{ {match{$item}{#}} {match{$item}{#}} } {$value} {$value:${sg {${extract{1}{:}{$item}}} {^.*@}{} }}}}}'
:test.com:test.com:hugo.com
如果你将扩展逻辑地分解成各个部分,它看起来是这样的:
exim -be '${reduce {<; ${readfile{/etc/exim/test_list.cf}{;}} }
{}
{${if or{ {match{$item}{#}} {match{$item}{#}} }
{$value}
{$value:${sg{${extract{1}{:}{$item}}} {^.*@} {}}}}
}
}
'
仍需修复的一件事是前导冒号 : 不应该出现在那里。我不确定它为什么会出现在那里 :-/ 而且我真的没有时间进一步深入研究它。需要稍微调整一下逻辑以捕捉导致出现前导冒号的任何条件,然后结果应该是可以用作条件的域列表。