Вероятно, вы не установили соответствующие gstream-плагины.
Без соответствующих аудио/видео декодеров он не будет воспроизводиться. MPlayer на это не полагается, поэтому он работает
.Ваша команда построения регулярного выражения немного неверна; кроме того, очень неэффективно перестраивать один и тот же шаблон на каждой итерации цикла.
Хотя в 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