2012-05-28 98 views
0

好日子大家,在bash中,如何測試單詞是否不在列表中?

我想打的,如果有條件有以下目的:

有兩個文件,腳本檢查文件1的字(變量$ word2test定位),如果file2中退出(每個單詞定位在變量$ wordINlist中)什麼都不做|如果這個詞是不是在文件2,打印到stdout

我的第一種方法是:

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

預先感謝任何建議

回答

1

試試這個簡單的bash腳本示例:

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

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

用正則表達式的另一種方式

+0

感謝太多sptnick! 現在,我可以前進! –

+0

不客氣=) –

0

假設$wordINlist是一個數組(你說「列表「,但我假設你的意思是陣列),你可以像這樣遍歷它:

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

如果$wordINlist是一個文件,那麼你可以簡單地通過它的grep:

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

egrep找到匹配返回true,否則返回false。所以,簡單地說,「無論是匹配的發現,或回聲$word2test

如果所有你想要做的是看看哪些項目是在file2file1和NOT,使用comm

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

如果你的文件是每行一個字的簡單列表,試試這個:

grep -Fvf file2 file1 

join -v 1 <(sort file1) <(sort file2) 
相關問題