Linux bash:基于字符串值的条目筛选

Linux bash:基于字符串值的条目筛选,linux,bash,scripting,conditional,Linux,Bash,Scripting,Conditional,我的脚本中有此检查: [[ $KEY == contact@(s|_groups) ]] && CONFIG[$KEY]="$VALUE" 它将包含contact*的行从一个文件写入一个数组。如何添加另一个将跳过该行中xi*值并将其写入数组的检查 我试过这样的方法: [[ $KEY == contact@(s|_groups) ]] && [[ $VALUE != "xi*" ]] && CONFIG[$KEY]="$VALUE" 但这对我不起

我的脚本中有此检查:

[[ $KEY == contact@(s|_groups) ]] && CONFIG[$KEY]="$VALUE"
它将包含contact*的行从一个文件写入一个数组。如何添加另一个将跳过该行中xi*值并将其写入数组的检查

我试过这样的方法:

[[ $KEY == contact@(s|_groups) ]] && [[ $VALUE != "xi*" ]] && CONFIG[$KEY]="$VALUE"
但这对我不起作用/

第一个文件如下所示:

…
联系Marko Geršić、Mijo、nagiosadmin、Patrick、ximgersic
…
第二个文件需要如下所示:

…
联系Marko Geršić、Mijo、nagiosadmin、Patrick
…
因此,没有接触线中的xi

由于
xi*
位于
$VALUE
的末尾,您只需使用删除匹配后缀模式:

[$KEY==contact@(s|u组)]和&CONFIG[$KEY]=“${VALUE%,xi*}”

xi*值并不总是在行的末尾

如果
xi*
位于
$VALUE
元素中,则可以使用模式替换:

[$KEY==contact@(s|u组)]和&CONFIG[$KEY]=“${VALUE/,xi*([^,])”
如果有多个xi*值

要删除多个
xi*
元素,只需将上面的
/
增加一倍:

[$KEY==contact@(s|u组)]和&CONFIG[$KEY]=“${VALUE//,xi*([^,])”
[$KEY==contact@(s|u组)]和&CONFIG[$KEY]=“${VALUE//xi*([^,])}”和&CONFIG[$KEY]=“${VALUE//,xi*([^,])}”


这是给我想要的结果的支票。:)

将通配符置于引号外:“xi”*脚本正在工作,extglob已启用。我只需要在上面加上这个检查:)@Charles Duffy-我可以将整个脚本粘贴到下面的答案中,这样你就可以检查:)@GavinPortwood-它不符合你的建议:/@昂德雷克它不适用于此尝试:
[$KEY==contact@(s|u组)]&&&[“$VALUE”=~^xi.*]]&&CONFIG[$KEY]=“$VALUE”
是的,请看下面的示例。这可能不是你想要的,你的意思是不起作用。所以,你实际上想跳入某些代码> <代码> >某些<代码>键<代码>,并将其中的几部分(最后的代码>,席…< /代码>)删除。听起来对吗?如果是这样,下一个问题是,格式有多稳定?就足够砍掉所有的<代码>,席…<代码>行结束吗?或者这段代码会出现在其他任何地方,并且需要逐条解析
值吗?xi*值并不总是在行的末尾:/然后使用后一种建议(一路上固定正则表达式),并注意只有当以
xi
开头的值只有一个匹配项时,这才有效。如果可以有多个条目,仅操纵
是不够的。将其拆分为单独的条目、筛选、重新组装。@Armali-如果有多个xi*值?此解决方案的Tnx:)