한 줄의 특정 문자 변경

한 줄의 특정 문자 변경

입력하다

  • 각 줄은 세미콜론으로 8부분으로 구분됩니다.
  • 각 부분에는 단어, 숫자, 공백 등이 포함될 수 있습니다.

산출

여섯 번째 섹션의 공백을 세미콜론으로 대체하여 줄을 다시 분리하여 총 섹션 수를 9개로 만들려고 합니다.

1;30;68;Az LEMda;Ads Awdsâ;1 Bethesda, Galilea, Impe Mkals;29;63
264;16 October 1978;2 April 2005;AAz Jgfg adal II;Madwl Qózca Asdtyła;20 May 1920 Maklo, Polasn;58;84

그것은 다음과 같이 끝날 것입니다

1;30;68;Az LEMda;Ads Awdsâ;1;Bethesda, Galilea, Impe Mkals;29;63
264;16 October 1978;2 April 2005;AAz Jgfg adal II;Madwl Qózca Asdtyła;20;May 1920 Maklo, Polasn;58;84

노력하다

공간을 찾기 위해 정규식의 모든 것을 사용해 보았지만 \zs실패했습니다. 내가 얻은 가장 가까운 것은 다섯 번째 세미콜론을 찾는 것이었습니다.

%s/\(.\{-};\zs\)\{5}/;/g

하지만 5번째 세미콜론 다음의 숫자 뒤에 공백을 찾아야 하므로 이 아이디어는 아무데도 연결되지 않습니다. 이제 이전에 정의한 섹션에서 공백을 찾으려고 합니다.

vim을 입력할 수 있지만 awk다시 말하지만 저는 vim을 처음 접합니다. 여섯 번째 부분을 찾아 공백을 세미콜론으로 변경했지만 첫 번째 공백뿐만 아니라 모든 공백이 변경되었습니다.

:%! awk 'BEGIN{FS=OFS=";"} {gsub(/ /, ";", $6)} 1'

여섯 번째 부분의 첫 번째 공백을 어떻게 변경할 수 있나요?

답변1

빔에서:

%s/^\(\([^;]*;\)\{5\}[^ ;]*\)\s/\1;/

의미는 다음과 같습니다

  • 다음으로 선택\1

    • 줄의 처음부터^
    • 세미콜론이 아닌 문자열 5개 \{5\}뒤에 세미콜론이 옵니다.
    • 6번째 필드에 세미콜론이나 공백이 아닌 선행 문자를 추가합니다.
  • 그 뒤에 공백이 있다

  • \1선택 항목 과 세미콜론 으로 바꿉니다 .

관련 정보