Регулярное выражение для сносок в Markdown

Если команды 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

Это будет выполнять соединение и аутентификацию для каждого оператора и будет исключительно медленным.

0
20.07.2019, 11:46
1 ответ

Проблема в выражении .*в вашем выражении, которое является "жадным". Это заставляет ваше выражение соответствовать ]и остальной части строки до последнего ]в строке. Вместо этого сделайте так, чтобы эта часть выражения совпадала только с тем, что, как вы сами сказали, может совпадать, то есть с любыми буквенно-цифровыми и -. Буквенно-цифровой символ сопоставляется с [[: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
2
28.01.2020, 02:29

Теги

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