как получить динамическую переменную в запросе скрипта оболочки

Можно использовать:

:v/module/s/\v.*(sup|gnd).*//
  • :v/pattern/cmdзапускает cmdв строках, которые не соответствуют шаблону
  • \vвключает очень -волшебство , так что все символы (, |обрабатываются как оператор регулярного выражения без необходимости добавлять к ним префикс \.

Обратите внимание, что он очищает , но в остальном не удаляет строки, содержащие supили gnd. Чтобы удалить их, поскольку вы не можете вкладывать команды g/ v, вы можете вместо этого использовать оператор регулярного выражения vimотрицательного просмотра вперед в одной команде g:

:g/\v^(.*module)@!.*(sup|gnd)/d
  • :g/pattern/cmdзапускает cmdв строках, которые соответствуют шаблону
  • (pattern)@!очень -магическим)соответствует нулевой ширине, если шаблон не соответствует в этой позиции, поэтому ^(.*module)@!соответствует началу строки, которая не соответствует содержать module.

Также возможен вариант подключения к sedили awk:

.
:%!sed -e /module/b -e /sup/d -e /gnd/d
  • /module/bответвляется от (и печатается строка )для строк, содержащих module.
  • для строк, которых нет, мы продолжаем со следующими двумя командами, которые удаляют строку, если она содержит supили gndсоответственно.

или:

:%!awk '/sup|gnd/ && ! /module/'

Если вы хотите найти те файлы, в которых нужно удалить эти строки, и удалить их, вы, вероятно, захотите пропустить vimи сделать все это с помощью утилит обработки текста. В системе GNU:

find. ! -name '*.back' -type f -size +3c -exec gawk '
  /sup|gnd/ && ! /module/ {printf "%s\0", FILENAME; nextfile}' '{}' + |
  xargs -r0 sed -i.back -e /module/b -e /sup/d -e /gnd/d

(здесь сохраните резервную копию исходных файлов как the-file.back, измените -i.backна -i, если вам не нужна резервная копия ).

  • findнаходит обычные файлы, имя которых не заканчивается на .backи размер которых не менее 4 байт. (файлы меньшего размера не могут содержать строку, содержащую supилиgnd(и разделитель строк ))и запускает gawkс путями соответствующих файлов в качестве аргументов.
  • когда gawkнаходит совпадающую строку в любом из этих файлов, он печатает путь к файлу(FILENAMEспециальная переменная ), разделенная символом NUL (для xargs -0), и переходит к следующему файл.
  • xargs -r0обрабатывает, что gawkвыводит для запуска sedс этими путями к файлам в качестве аргументов.
  • sedредактирует файл на месте.
0
14.04.2020, 17:14
1 ответ

Только не используйте одинарные кавычки:

mysql -u$master_db_user -p$master_db_passwd -D$master_db_name \
    -e "select * from uppcl_amount_details where date='$Now' into \
         outfile '/created_files/uppcl.csv' fields terminated by ',' \
          lines terminated by '\n'";

Таким образом, вы также можете получить имя файла с самого начала:

into outfile '/created_files/offline_collection$Now.csv'

Также обратите внимание, что ваш формат date, вероятно, не тот, который вам нужен. У вас есть это:

$ date +"%d-%m-20%Y"
14-04-202020

Но вы, наверное, этого хотите:

$ date +%F
2020-04-14

Так:Now=$(date +%F).

1
19.03.2021, 02:29

Теги

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