Если команды SQL не зависят от результатов предыдущих команд SQL, просто передайте их клиенту SQL или сохраните их в текстовом файле и передайте его клиенту SQL:
while [ some condition ]; do
# something that sets val1, val2 and val3 in this example
# output INSERT statement (for example):
printf 'INSERT INTO t (c1, c2, c3) VALUES (%s, %s, %s);\n' "$val1" "$val2" "$val3"
done | mysql -h server database
Чего вам следует избегать , так это зацикливания на вызове SQL-клиента, такого как
while...; do
echo "statement" | mysql -h server database
done
Это будет выполнять соединение и аутентификацию для каждого оператора и будет исключительно медленным.
Проблема в выражении .*
в вашем выражении, которое является "жадным". Это заставляет ваше выражение соответствовать ]
и остальной части строки до последнего ]
в строке. Вместо этого сделайте так, чтобы эта часть выражения совпадала только с тем, что, как вы сами сказали, может совпадать, то есть с любыми буквенно-цифровыми и -
. Буквенно-цифровой символ сопоставляется с [[:alnum:]]
, а [[:alnum:]-]
позволяет выражению в квадратных скобках также соответствовать тире :
\[\^mean-[[:alnum:]-]*\]
Выполнение этого на данных в вашем вопросе:
$ grep -o '\[\^mean-[[:alnum:]-]*\]' file
[^mean-vicissitudes]
[^mean-immortality]
[^mean-ingot]
[^mean-remonstrance]
[^mean-libeller]
[^mean-debauched]
[^mean-amorous]
[^mean-turpitude]
[^mean-debauched]
[^mean-licentious]
[^mean-frivolous]
[^mean-despots]
[^mean-repentance]
[^mean-ignominy]
[^mean-vain]
[^mean-presumptuousness]
[^mean-haughtiness]
Ваша команда grep
, очевидно, извлечет совпадения, но не удалит их. Для этого используйте sed
скрипт редактирования:
$ sed 's/\[\^mean-[[:alnum:]-]*\]//g' file
and the most amorous
drunken, licentious,
haughtiness,
Добавьте к этому некоторое удаление пустых строк и начальных пробелов,
$ sed 's/\[\^mean-[[:alnum:]-]*\]//g; /^[[:blank:]]*$/d; s/^[[:blank:]]*//' file
and the most amorous
drunken, licentious,
haughtiness,
Или, чтобы изменить только те строки, на которых есть [^mean-...]
,
sed '/\[\^mean-[[:alnum:]-]*\]/{ s///g; /^[[:blank:]]*$/d; s/^[[:blank:]]*//; }' file