vi에서 라인을 특정 패턴으로 바꾸는 방법은 무엇입니까?

vi에서 라인을 특정 패턴으로 바꾸는 방법은 무엇입니까?

"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/\[/_/

...다른 가능성이 없다면 [...라인이 일치하지 않는 한앞으로당신이 바꾸고 싶은 것.

간단할수록 좋습니다.만약에귀하의 요구 사항을 충족합니다.

관련 정보