대체 명령에서 슬래시 (/)를 느낌표 (!)로 바꾸는 것은 무엇을 의미합니까?


13

나는 최근에 저자가 다음 과 같이 /대체 된 대체 명령을 보았습니다 !.:s!abc!ABC!g

이 사용법에 대한 문서를 찾으려고했지만 관련성이 없습니다. 그래서 나는 스스로 실험을 시도했지만 다시 한 번 두 징후의 실제 차이점을 알 수 없었습니다. 내가 찾은 것은 다음과 같습니다.

  • 그것은 혼합 할 수 없습니다 !/명령에. 예를 들어 :s!abc/ABC실패합니다.
  • 패턴에서 !이스케이프를 피하기 위해 사용 하는 것이 유용 할 수 있습니다 /. 예를 들어 내가 대체하려는 경우 </%내가 사용할 수있는 :%s!</!%!g대신에 :%s/<\//%/g.
  • 어떤 경우에는 일부 정규 표현식이 작동하지 않고 /제대로 작동하는 !것처럼 보이지만 실제로 정규 표현식 전문가가 아니기 때문에 확실하지 않습니다.

그래서 내 질문은 간단합니다 : !대체 명령에서 사용하면 어떤 이점이 있으며 언제 대신 대신 사용하기로 결정해야 /합니까?



실제로 실수로 이중 게시물을 만들었습니다. 몇 분 전에 내가해야 할 일을 알기 위해 플래그를 지정했습니다.
statox

답변:


22

보낸 사람 :help :global:

을 둘러싼 '/'대신 {pattern}알파벳 문자 '\', ' "'또는 '|'을 제외한 다른 단일 바이트 문자를 사용할 수 있습니다. 이는 '/'를 포함하려는 경우 유용합니다. 검색 패턴 또는 대체 문자열

당신이 이미 실험에서 고안 한 것처럼 이것은 소위 " 이쑤시개 이쑤시개 증후군 " 을 막기위한 것 입니다. 이걸 고려하세요:

:%s/\/home\/martin\/test/\/home\/jake\/x/

대:

:%s!/home/martin/test!/home/jake/x!

두 번째 형식은 분명히 훨씬 더 읽기 쉽습니다.

이것이 분리 문자를 변경할 수있는 유일한 이유입니다. 우리 인간이 더 읽기 쉽게 만들 수 있습니다. 컴퓨터는 신경 쓰지 않습니다.

sed예를 들어 GNU에서 일부 다른 프로그램은 훨씬 더 유연 x하므로 원하는 경우 구분 기호로 사용할 수 있습니다 . sed sxaxbxg file와 동일합니다 sed s/a/b/g file.


가독성에 관해서 :%s@/home/martin/test@/home/jake/x@는 "지방"을 @사용하여 문장의 개별 부분이 시작 / 종료되는 위치를 더 쉽게 볼 수 있기 때문에 선호하고 제안 합니다.
DevSolar

@DevSolar 내가 :%s#/home/martin/test#/home/jake/x#더 잘 작동한다는 것을 알았지 만 그것은 개인적인 의견 일뿐입니다.
Amit Gold
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.