"s#_decoded_block["
패턴이 포함된 줄을 로 바꾸려고 합니다 "s#_decoded_block_"
. 이를 위해 사용하는 명령은 다음과 같습니다.
%s/s\d\+_decoded_block\[/s\d\+_decoded_block_/g
나는 교체를 기대했지만 "s#_decoded_block_"
그것이 내가 얻은 것입니다 "sd+_decoded_block_"
. 내가 뭘 잘못하고 있는지 알려주세요.
답변1
질문의 "#"이 십진수일 것으로 예상하는 것 같습니다. 역참조를 사용하여 이 작업을 수행할 수 있습니다.
%s/s\(\d\+\)_decoded_block\[/s\1_decoded_block_/g
\(\d\+\)
하나 이상의 십진수와 일치하고 이를 tokens 로 바꿉니다 \1
.
역참조 내에서 더 많은 텍스트를 이동하여 역참조를 향상할 수 있습니다.
%s/s\(\d\+_decoded_block\)\[/s\1_/g
왜냐하면 \1
그룹 내에서 일치하는 항목으로 대체되기 때문입니다.
답변2
사용 사례에 정확히 맞는지는 확실하지 않지만 다음을 사용할 수도 있는 것 같습니다.
:g/s\d\+_decoded_block\[/ s/\[/_/
...다른 가능성이 없다면 [
...라인이 일치하지 않는 한앞으로당신이 바꾸고 싶은 것.
간단할수록 좋습니다.만약에귀하의 요구 사항을 충족합니다.