2013-03-13 86 views
0

例如有一個文件input.txt檢查文本文件是否包含全部10個單詞的正則表達式是什麼?

我想檢查input.txt包含了所有的以下十個字:

catdogfishchickduckcowhorse,...,sheep

請注意,我不在乎它們在文本文件中出現的順序。

爲了兼容性,請儘可能使用基本操作符。

+1

你嘗試過什麼嗎? – alestanis 2013-03-13 20:27:56

+5

你需要使用'正則表達式'嗎?看起來像'InStr()'可能更容易...另外,你需要什麼語言,他們必須以任何特定的順序? – 2013-03-13 20:28:39

+1

解析文件並以編程方式檢查該條件會不會更容易? – assylias 2013-03-13 20:29:42

回答

0

使用

c=0 
word_list=(word1 word2 word3 word4 word5 word6 word7 word8 word9 word10) 
arr=($(cat input.txt)) # taking advantage of word spliting 

for i in "${word_list[@]}"; do 
    for j in "${arr[@]}"; do 
     if [[ $i == $j ]]; then 
      ((c++)) 
      continue 2 # stop searching the current word 
     fi 
    done 
done 

((c==10)) && echo "true" 

更多I/O版本使用

c=0 
word_list=(word1 word2 word3 word4 word5 word6 word7 word8 word9 word10) 

for i in "${word_list[@]}"; do 
    if grep -q "\b$i\b" input.txt; then 
     ((c++)) 
     continue # stop searching the current word 
    fi 
done 

((c==10)) && echo "true" 
0

此解決方案要求grep支持-o選項。

grep -Fwo -f patternfile.txt inputfile.txt | sort | uniq 

F標誌匹配固定字符串,因爲關鍵字是固定的字符串。
w標誌爲grep命令強制模式只匹配整個單詞。
o標誌將打印唯一的匹配,每個匹配一行。這是必要的與sortuniq工作的伎倆。

在這個命令鏈之後,如果一個單詞有一個匹配,那麼它將在輸出中恰好出現一次。這不是完整的解決方案,但我認爲這足以讓我們繼續前進。

patternfile.txt包含您要搜索的詞,換行分隔。在你的情況下:

cat 
dog 
fish 
chick 
duck 
cow 
horse 
sheep 
相關問題