проверьте, находится ли переменная в списке

Вероятно, вы не установили соответствующие gstream-плагины.

Без соответствующих аудио/видео декодеров он не будет воспроизводиться. MPlayer на это не полагается, поэтому он работает

.
1
13.04.2015, 14:30
2 ответа

Это не очень ясно ...

grep -owf champs.txt  t.txt
1
27.01.2020, 23:50

Ваша команда построения регулярного выражения немного неверна; кроме того, очень неэффективно перестраивать один и тот же шаблон на каждой итерации цикла.

Хотя в bash есть команда read , обычно не рекомендуется использовать ее для обработки больших объемов текста, поскольку она очень медленная, а также является частым источником ошибок сценариев. Поэтому попробуйте ограничить использование read обработкой простого пользовательского ввода.

Как уже упоминалось, это работа для grep . Или, если вам нужен больший контроль, подумайте об использовании awk, который имеет хорошие возможности регулярных выражений. Но если вы действительно хотите сделать это так же, как ваш опубликованный код, вот один из способов сделать это.

#!/usr/bin/env bash

pat='^('$(paste -sd'|' champs.txt)')$'
printf "pattern: '%s'\n" "$pat"

IFS=
tr -s '[:blank:]' '\n' < t.txt |
while read -r word; do
    if [[ "$word" =~ $pat ]]; 
        then echo "'$word' in list"
        else echo "'$word' NOT in list"
    fi
done

(Вышеупомянутый скрипт проходит анализ ShellCheck ).

Как видите, мы строим шаблон регулярного выражения pat вне цикла; Я добавил printf для отображения шаблона, чтобы мы могли быть уверены, что это то, что мы хотим. Обратите внимание, что обычно намного лучше использовать printf , чем echo для отображения произвольных строк.

Я изменил ваш t.txt , чтобы добавить несколько дополнительных тестовых слов, но использовал тот же champs.txt , как указано выше.

t.txt

select * from student;
insert name, age, from professors;
delete from departement where DPTNUM= '20';
test number ins settle deleted

И вот результат:

pattern: '^(select|insert|into|values|delete|drop|from|create|table|where|set|varchar|number)$'
'select' in list
'*' NOT in list
'from' in list
'student;' NOT in list
'insert' in list
'name,' NOT in list
'age,' NOT in list
'from' in list
'professors;' NOT in list
'delete' in list
'from' in list
'departement' NOT in list
'where' in list
'DPTNUM=' NOT in list
''20';' NOT in list
'test' NOT in list
'number' in list
'ins' NOT in list
'settle' NOT in list
'deleted' NOT in list
0
27.01.2020, 23:50

Теги

Похожие вопросы