치환 Vim의 줄 바이라고 문자를 바꾸는 방법은 무엇입니까?




쉘 스크립트 개행문자 제거 (8)

\n 대신 \r 사용하십시오.

\n 을 사용하면 텍스트에 null 문자가 삽입됩니다. 줄 바꿈을하려면 \r 사용하십시오. 그러나 개행을 검색 할 때는 \n 사용합니다. 이 비대칭 성은 \n\r 이 약간 다른 것을 하기 때문에 발생합니다 :

\n 은 줄 바꿈 (개행)과 일치하지만 \r 은 캐리지 리턴과 일치합니다. 반면에 대치 엔 \n 은 널 문자를 삽입하지만 \r 은 개행 문자를 삽입합니다 (좀 더 정확하게는 입력 <CR> 으로 처리됩니다). 다음은 Vim 명령 행 기능을 사용하여이를 설명하는 비 대화식 예입니다 (다시 말하면, 다음을 복사하여 터미널에 붙여 넣어 실행하십시오). xxd 는 결과 파일의 16 진 덤프를 표시합니다.

echo bar > test
(echo 'Before:'; xxd test) > output.txt
vim test '+s/b/\n/' '+s/a/\r/' +wq
(echo 'After:'; xxd test) >> output.txt
more output.txt
Before:
0000000: 6261 720a                                bar.
After:
0000000: 000a 720a                                ..r.

즉, \n 은 바이트 0x00을 텍스트에 삽입했습니다. \r 에 바이트 0x0a가 삽입되었습니다.

https://code.i-harness.com

나는 현재 파일에서 각각을 새로운 라인으로 대체하려고한다.

:%s/,/\n/g 

그러나 실제 줄 바꿈 대신 ^@ 처럼 보이는 것을 삽입합니다. 파일이 DOS 모드 또는 다른 형식이 아닙니다.

어떻게해야합니까?

내가 좋아하는 것이 궁금하신 분은 왜 Vim에 새 줄 바꿈 문자가 있습니까? 게다가.


Windows에서 Vim을 사용하면 Ctrl + VCtrl + V로 사용됩니다.


나를 위해 일한 해답을 얻습니다. 이 녀석에게서

---- quoting http://jaysonlorenzen.wordpress.com/2009/04/28/use-vi-editor-to-insert-newline-char-in-replace/

뭔가 다른 일을해야하고 기억할 수 없으며 그 다음을 봐야합니다.

vi에서 검색에 개행 문자를 삽입하고 바꾸려면 다음을 수행하십시오.

: % s / look_for / replace_with ^ M / g 위의 명령은 "look_for"의 모든 인스턴스를 "replace_with \ n"(\ n은 줄 바꿈을 의미)로 대체합니다.

"^ M"을 얻으려면 키 조합 "ctl-V"를 입력 한 다음 (모든 키를 놓은 후) "enter"키를 누릅니다.


너는 다음을 사용해야한다.

:%s/,/^M/g

^M 문자를 얻으려면 Ctrl v누른 다음 Enter 누릅니다.


이것은 내가 생각하는 방식에 대한 최선의 대답이지만 테이블에서 더 좋았을 것입니다 : https://.com/a/12389839/962394 .

그래서, rewording :

정규 표현식에서 줄 바꿈 (ascii 0x0a , unix 개행 문자)을 사용하려면 \r 을 사용해야하지만 대체로는 특이합니다. 줄 바꿈에 \n , 캐리지 리턴에 \n 을 계속 사용해야합니다. .

이것은 vim이 \n 을 NIL 문자 (ascii 0x00 )를 의미하는 대체 문자로 사용했기 때문입니다. 당신은 NIL이 \0 이었을 것이라고 예상했을 것입니다. 줄 바꿈에 보통 사용하는 \n 을 해방시켜 주겠지 만, \0 이미 정규 표현식에서 의미를 가지므로 \n 로 바뀌 었습니다. 그러므로 개행 문자를 \n 에서 \r (정규 표현식에서 캐리지 리턴 문자, ascii 0x0d )으로 변경하십시오.

character                | ascii code | C representation | regex match | regex replacement
-------------------------+------------+------------------+-------------+------------------------
nil                      | 0x00       | \0               | \0          | \n
line feed (unix newline) | 0x0a       | \n               | \n          | \r
carriage return          | 0x0d       | \r               | \r          | <unknown>

NB : ^M (Linux의 경우 Ctrl-V Ctrl-M)은 다른 사람들이 (내가 방금 시도한) 충고보다는 캐리지 리턴 대신 정규식 대체에 사용될 때 개행을 삽입합니다.

또한 vim은 파일 형식 설정에 따라 파일로 저장 될 때 줄 바꿈 문자를 변환하므로 사안을 혼동시킬 수 있습니다.


이클립스에서 ^M 문자를 한 줄에 삽입 할 수 있으며이를 뉴 라인으로 변환하려고합니다.

:s/\r/\r/g

하지만 다음 작품을 대체해야한다면

:%s/\n/\r\|\-\r/g

위의 모든 행은 다음 행으로 대체 된 후 | - 그리고 다시 다음 행으로 대체됩니다. 이것은 wiki 테이블에서 사용됩니다. 텍스트가 다음과 같은 경우 :

line1
line2
line3

변경됨

line1
|-
line2
|-
line3

\r 여기 당신을 위해 일할 수 있습니다.





vi