Vim:シェルスクリプトでバックティックを$()表記に変換する

Vim:シェルスクリプトでバックティックを$()表記に変換する

シェルスクリプトに次の文があるとします。

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

$()バックティック表記法を次の表記法に変換したいと思います。

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

ファイル全体の検索/置換でVimでこれを行うにはどうすればよいですか?

やる気https://github.com/koalaman/shellcheck/wiki/SC2006

答え1

あなたは試すことができます

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

gユーザーに交換するたびにメッセージが表示さcれるようにグローバル(行のすべての項目について)にします。vim

ただし、入れ子になったバックティックと複数行コードでは機能しません。バックティックペアにのみ適用されます。

終了してこの目的vimに使用することもできます。sed

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

複数行の逆行列で動作しますが、ネストはありません。

関連情報