Vim: 쉘 스크립트에서 백틱을 $() 표기법으로 변환

Vim: 쉘 스크립트에서 백틱을 $() 표기법으로 변환

쉘(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

답변1

당신은 시도 할 수 있습니다

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

g사용자에게 교체할 때마다 메시지가 표시 c되도록 전역(행의 모든 ​​항목에 대해)으로 만듭니다 .vim

그러나 중첩된 백틱 및 여러 줄 코드에서는 작동하지 않습니다. 백틱 쌍에만 적용됩니다.

종료하고 이 목적 vim으로 사용할 수도 있습니다 .sed

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

여러 줄 역행렬과 함께 작동하지만 중첩은 없습니다.

관련 정보