背景:虽然我认为 Fail2Ban 是保护 Apache 等子系统的绝佳方式,但要收集所有信息需要做大量工作。因此,我正在编写一个 BASH 脚本来帮我完成这项工作。
我需要把'得到' 选项fail2ban-客户端在数组中..
到目前为止,我使用以下方法隔离了它们:f2b_opts_cmd="$(sudo fail2ban-client --help | grep -i 'get <jail>' | grep -vw 'act')"
在命令行上,它看起来像:
get <JAIL> logpath gets the list of the monitored
get <JAIL> logencoding gets the encoding of the log files
get <JAIL> journalmatch gets the journal filter match for
get <JAIL> ignoreself gets the current value of the
get <JAIL> ignoreip gets the list of ignored IP
get <JAIL> ignorecommand gets ignorecommand of <JAIL>
get <JAIL> failregex gets the list of regular
get <JAIL> ignoreregex gets the list of regular
get <JAIL> findtime gets the time for which the filter
get <JAIL> bantime gets the time a host is banned for
get <JAIL> datepattern gets the patern used to match
get <JAIL> usedns gets the usedns setting for <JAIL>
get <JAIL> maxretry gets the number of failures
get <JAIL> maxlines gets the number of lines to buffer
get <JAIL> actions gets a list of actions for <JAIL>
但是,变量看起来像这样:
get
<JAIL>
logpath 获取受监控的列表 get<JAIL>
logencoding 获取日志文件的编码 get<JAIL>
journalmatch 获取日志过滤器匹配项 get<JAIL>
ignoreself 获取当前值 get<JAIL>
ignoreip 获取忽略的 IP 列表 get<JAIL>
ignorecommand 获取忽略的命令<JAIL>
get<JAIL>
failregex 获取常规列表 get<JAIL>
ignoreregex 获取常规列表 get<JAIL>
findtime 获取过滤器的时间 get<JAIL>
bantime 获取主机被禁止的时间 get datepattern 获取模式.. 等等等等。
但我需要有类似的东西:
f2b_opts=(logpath logencoding journalmatch ignoreself ignoreip ignorecommand failregex ignoreregex findtime bantime datepattern usedns maxretry maxlines actions)
怎样得到该<JAIL>
部分后面的单词?
在本论坛和其他网站上搜索了几天后,仍然没有找到解决这个问题的方法。这里的复杂因素是“小于”和“大于”符号,以及原始字符串中有多个“JAIL”字词(见示例)。
答案1
您可以使用以下命令来翻译给定的文本(我不知道它是输入的文本文件还是的结果f2b_opts_cmd="$(sudo fail2ban-client --help | grep -i 'get <jail>' | grep -vw 'act')"
,但这并不重要)。在这两种情况下,您都可以使用此sed
命令tr
组合:
sed -e "s/get\s<JAIL>\s\([^ ]*\).*/\1/" input.txt | tr '\n' ' '
得到以下输出:
logpath logencoding journalmatch ignoreself ignoreip ignorecommand failregex ignoreregex findtime bantime datepattern usedns maxretry maxlines 操作
要作为管道中命令的一部分发挥作用,请删除“input.txt”部分。
如果我猜得没错的话,这可能就是你想要的:
f2b_opts_cmd="$(sudo fail2ban-client --help | grep -i 'get <jail>' | grep -vw 'act' | sed -e "s/get\s<JAIL>\s\([^ ]*\).*/\1/" input.txt | tr '\n' ' ')"
但这只是猜测。