好日子大家,在bash中,如何測試單詞是否不在列表中?
我想打的,如果有條件有以下目的:
有兩個文件,腳本檢查文件1的字(變量$ word2test定位),如果file2中退出(每個單詞定位在變量$ wordINlist中)什麼都不做|如果這個詞是不是在文件2,打印到stdout
我的第一種方法是:
if ! [[ "$word2test" =~ "$wordINlist" ]] ; then
echo $word2test
fi
預先感謝任何建議
好日子大家,在bash中,如何測試單詞是否不在列表中?
我想打的,如果有條件有以下目的:
有兩個文件,腳本檢查文件1的字(變量$ word2test定位),如果file2中退出(每個單詞定位在變量$ wordINlist中)什麼都不做|如果這個詞是不是在文件2,打印到stdout
我的第一種方法是:
if ! [[ "$word2test" =~ "$wordINlist" ]] ; then
echo $word2test
fi
預先感謝任何建議
試試這個簡單的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"
用正則表達式的另一種方式
假設$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
」
如果所有你想要做的是看看哪些項目是在file2
file1
和NOT,使用comm
:
comm -23 <(sort -u file1) <(sort -u file2)
如果你的文件是每行一個字的簡單列表,試試這個:
grep -Fvf file2 file1
或
join -v 1 <(sort file1) <(sort file2)
感謝太多sptnick! 現在,我可以前進! –
不客氣=) –