Можно использовать:
: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
редактирует файл на месте. Только не используйте одинарные кавычки:
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)
.