bash:基于字符串值的条目过滤

时间:2018-03-19 22:17:17

标签: linux bash scripting conditional

我在我的剧本中有这个检查:

[[ $KEY == contact@(s|_groups) ]] && CONFIG[$KEY]="$VALUE"

正在编写包含从一个文件到数组的联系人*的行。如何添加另一个将跳过该行中的xi *值并将其写入数组的检查?

我尝试过类似的事情:

[[ $KEY == contact@(s|_groups) ]] && [[ $VALUE != "xi*" ]] && CONFIG[$KEY]="$VALUE"

但它不适合我。 :/

2 个答案:

答案 0 :(得分:1)

[[ $KEY == contact@(s|_groups) ]] && CONFIG[$KEY]="${VALUE//xi*([^,])}" && CONFIG[$KEY]="${VALUE//,xi*([^,])}"

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

答案 1 :(得分:0)

  

第一个文件如下所示:

…
    contacts                        Marko Geršić,Mijo,nagiosadmin,Patrick,ximgersic
…
     

第二个文件需要如下所示:

…
    contacts                        Marko Geršić,Mijo,nagiosadmin,Patrick
…
     

所以,没有联系*行中的xi *。

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

  [[ $KEY == contact@(s|_groups) ]] && CONFIG[$KEY]="${VALUE%,xi*}"
  

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

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

  [[ $KEY == contact@(s|_groups) ]] && CONFIG[$KEY]="${VALUE/,xi*([^,])}"
  

如果有多个xi *值?

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

  [[ $KEY == contact@(s|_groups) ]] && CONFIG[$KEY]="${VALUE//,xi*([^,])}"