字符串操作-获取某个单词后面的部分

字符串操作-获取某个单词后面的部分

背景:虽然我认为 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' ' ')"

但这只是猜测。

相关内容