Может быть, я пропустил то, что вы пытаетесь сделать, но если я правильно понял, вы просто хотите обновить формат вывода.
Попробуйте это:
:g/[(]echo "/s/echo "\([^"]*\)"\(.*\)$/echo "\1"\2^Mecho "\1: $\1"/
ПРИМЕЧАНИЕ: ^ M - это один управляющий символ, НЕ КАРАТ, а затем M.
См. Ниже.
До -
#!/bin/bash
# Get host
db_host=$(echo "dbhost")
# Get DB name
db_name=$(echo "dbname")
# Get user
db_user=$(echo "dbuser")
# Get password
db_pass=$(echo "dbpass")
После -
#!/bin/bash
# Get host
db_host=$(echo "dbhost")
echo "dbhost: $dbhost"
# Get DB name
db_name=$(echo "dbname")
echo "dbname: $dbname"
# Get user
db_user=$(echo "dbuser")
echo "dbuser: $dbuser"
# Get password
db_pass=$(echo "dbpass")
echo "dbpass: $dbpass"
Объяснение
:g/[(]echo "/s/echo "\([^"]*\)"\(.*\)$/echo "\1"\2^Mecho "\1: $\1"/
в штуках -
:g/pat/cmd
Это говорит "глобально" в каждой строке, соответствующей "pat" do "cmd".
Мой "кусочек" был вашим (echo "
, а мой "cmd" - замена.
s/echo "\([^"]*\)"\(.*\)$/echo "\1"\2^Mecho "\1: $\1"/
Я сказал заменить echo "..."...
и запомнить, что было между кавычками как 1, и что-нибудь после как 2.
В заменяемой части написано, что нужно вернуть все, что там было (echo "\1"\2
), а затем немного махинаций.
Нажав CTRL-V Я вошел в режим цитаты, который позволил мне нажать CTRL-M , чтобы вставить возврат каретки , который vim
преобразуется при выполнении в новую строку, по крайней мере, в версии, которые я использовал.
Это трюк. Это может быть удобно знать и использовать, но всегда имейте в виду, что такие вещи в основном являются хакерскими. Caveat Scriptor.
Я добавил это в отформатированном echo "\1: $\1"
, чтобы добавить нужные строки.