Vim: преобразовать обратные к нотации $ () в сценарии оболочки

Предположим, что у меня есть некоторые инструкции в скрипте shell (bash), например

var=`cat file.txt` echo "Date is: `date`" 

Я хочу преобразовать обратную обратную запись в нотацию $() например:

 var=$(cat file.txt) echo "Date is: $(date)" 

Как я могу сделать это в Vim с помощью поиска / замены для всего файла?

Мотивация: https://github.com/koalaman/shellcheck/wiki/SC2006

  • Сохранять измененную метку времени после редактирования
  • Проверка окончаний строки из текста, созданного perl-скриптом
  • Могу ли я повторно войти в отключенную сессию?
  • Сохранение и сохранение в Vim?
  • Как заменить слова в файле git rebase
  • Поиск файлов и отправка в файл temp
  • Vim powerline плагин цвет нормального режима
  • Как выйти из Vi?
  • One Solution collect form web for “Vim: преобразовать обратные к нотации $ () в сценарии оболочки”

    Можешь попробовать

     :% s/`\([^`]*\)`/$(\1)/gc 

    g делает его глобальным (для всех записей в строке), c позволяет vim запрашивать пользователя о каждой замене.

    Но он не будет работать с вложенными backticks и многострочным кодом. Только для пар обратных линий в очереди.

    Вы также можете выйти из vim и использовать sed для этого:

     sed -n -i.backup 'N; ${s/`\([^`]*\)`/$(\1)/g; p; q}; b' filename 

    Он будет работать с многострочными backtrics, но без вложенных.

    Linux и Unix - лучшая ОС в мире.