代码之家  ›  专栏  ›  技术社区  ›  jhon.smith

unix shell sh从seta获取setb中缺少的项

  •  0
  • jhon.smith  · 技术社区  · 6 年前

    我使用的是sh shell(遗留需求),我有一个这样的集合

    Set A --> 'A.txt B.txt C.txt D.txt E.txt' 
    and another set like 
    Set B --> 'A.txt D.txt'
    

    如果我想找到B组而不是A组中的项目

    setA='A.txt B.txt C.txt D.txt E.txt'
    setB='A.txt D.txt'
    
    echo $setA |grep -v -w $setB
    

    我的尝试根本没有结果

    1 回复  |  直到 6 年前
        1
  •  1
  •   oliv    6 年前

    for i in $setB; do 
      if ! echo "$setA" | grep -q "$i";  then 
        echo "$i is not in setA"
      fi
    done
    

    bash

    for i in $setB; do [[ "$setA" =~ "$i" ]] || echo "$i is not in setA"; done
    

    =~ setB setA

    鉴于这两组,没有匹配,因为你问 .

    setB='A.txt D.txt F.txt'
    

    $ for i in $setB; do [[ "$setA" =~ "$i" ]] || echo "$i is not in setA"; done
    F.txt is not in setA