例如有一個文件input.txt
檢查文本文件是否包含全部10個單詞的正則表達式是什麼?
我想檢查input.txt
包含了所有的以下十個字:
cat
,dog
,fish
,chick
,duck
,cow
,horse
,...,sheep
。
請注意,我不在乎它們在文本文件中出現的順序。
爲了兼容性,請儘可能使用基本操作符。
例如有一個文件input.txt
檢查文本文件是否包含全部10個單詞的正則表達式是什麼?
我想檢查input.txt
包含了所有的以下十個字:
cat
,dog
,fish
,chick
,duck
,cow
,horse
,...,sheep
。
請注意,我不在乎它們在文本文件中出現的順序。
爲了兼容性,請儘可能使用基本操作符。
使用bash:
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版本使用grep:
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"
此解決方案要求grep
支持-o
選項。
grep -Fwo -f patternfile.txt inputfile.txt | sort | uniq
F
標誌匹配固定字符串,因爲關鍵字是固定的字符串。
w
標誌爲grep
命令強制模式只匹配整個單詞。
o
標誌將打印唯一的匹配,每個匹配一行。這是必要的與sort
和uniq
工作的伎倆。
在這個命令鏈之後,如果一個單詞有一個匹配,那麼它將在輸出中恰好出現一次。這不是完整的解決方案,但我認爲這足以讓我們繼續前進。
patternfile.txt
包含您要搜索的詞,換行分隔。在你的情況下:
cat
dog
fish
chick
duck
cow
horse
sheep
你嘗試過什麼嗎? – alestanis 2013-03-13 20:27:56
你需要使用'正則表達式'嗎?看起來像'InStr()'可能更容易...另外,你需要什麼語言,他們必須以任何特定的順序? – 2013-03-13 20:28:39
解析文件並以編程方式檢查該條件會不會更容易? – assylias 2013-03-13 20:29:42