2016-05-27 4 views
0

Когда пользователь что-то вводит, скрипт должен проверить, содержит ли вход какие-либо слова из словарного файла.Определить, содержит ли предложение слово в файле

Вход:

A sentence that contains the word, word1. 

WordFile:

word1 
word2 
word3 

Код:

[[ -z $(cat 'vocabulary/lists/wordfile' | grep -Fe $($input//" "/"\|")) ]] 

Выход:

> [WORD] 
./core.sh: line 168: [WORD]// /\|: No such file or directory 
grep: option requires an argument -- 'e' 
Usage: grep [OPTION]... PATTERN [FILE]... 
Try 'grep --help' for more information. 
[WORD] 
+0

Что ваш 'wordfile' выглядеть? Я думаю, что это может быть так же просто, как 'grep -Fqf wordfile <<<" $ input "&& echo 'found a word''. –

ответ

1

Попробуйте это:

[[ -n $(sed -n -f <(sed 's/^/\//g;s/$/\/p/g' vocabulary/lists/wordfile) <<< "$input") ]] && echo Found 
+0

Это сработало, спасибо! – Corvo

2

Я думаю, что это может быть то, что вам нужно:

grep -Fqf wordfile <<<"$input" && echo 'found a word' 

Это фиксированная строка матч (-F) с использованием шаблонов из файла wordfile (-f wordfile) и использует -q для тихо выходят успешно, если найдено совпадение.

Например:

$ cat wordfile 
apple 
ball 
cat 
$ input='a string containing the word ball' 
$ grep -Fqf wordfile <<<"$input" && echo 'found a word' 
found a word 
+0

Просто 'grep -Eqf wordfile && echo" found "' возможно, тоже работает – hek2mgl

+0

@ hek2mgl Я не уверен, что я бы назвал расширенный режим регулярного выражения '-E' проще, чем использовать режим фиксированной строки! ;) –

+0

О, конечно. '-F' также может иметь смысл (и на самом деле используется в вопросе, он думал, что это« -E »). Я просто указывал, что grep может напрямую читать '$ input'. – hek2mgl