在bash中,如何测试单词是否不在列表中?

时间:2012-05-28 17:40:41

标签: bash if-statement

大家好日子,

我希望以下列目标制作if条件:

有两个文件,如果在file2中退出(每个单词位于变量$ wordINlist中),则脚本检查file1的单词(在变量$ word2test中找到) | 如果单词不在file2中,则将其打印到stdout

我的第一个方法是:

if ! [[ "$word2test" =~ "$wordINlist" ]] ; then
    echo $word2test
fi

提前感谢任何建议

3 个答案:

答案 0 :(得分:2)

试试这个简单的bash示例脚本:

word=foobar
grep -q "\<$word\>" FILE || echo "$word is *not* in FILE"

使用REGEX的另一种方式:

word=foobar
grep -q "^$word *$" FILE || echo "$word is *not* in FILE"

答案 1 :(得分:1)

假设$wordINlist是一个数组(你说“列表”,但我假设你的意思是数组),你可以像这样迭代它:

for item in ${wordINlist[@]}; do
  [[ $item == $word2test ]] || echo $word2test
done

如果$wordINlist是一个文件,那么你可以简单地浏览它:

egrep -q "\b${word2test}\b" "$wordINlist" || echo "$word2test"

egrep找到匹配项时,它返回true,否则返回false。所以简单地说,“要么找到匹配,要么回声$word2test

如果你想要做的只是file1而不是file2中的哪些项目,请使用comm

comm -23 <(sort -u file1) <(sort -u file2)

答案 2 :(得分:1)

如果您的文件是每行一个单词的简单列表,请尝试以下操作:

grep -Fvf file2 file1

join -v 1 <(sort file1) <(sort file2)