replace 개행문자 - Vim에서 개행 문자로 바꾸는 방법?




보기 치환 (10)

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

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

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

line1
line2
line3

변경됨

line1
|-
line2
|-
line3

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

:%s/,/\n/g 

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

어떻게해야합니까?

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


\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가 삽입되었습니다.


문법 s/foo/bar \r\n 에는 문맥에 따라 다른 의미가 있습니다.

짧은:

foo :
\ n = newline (linux / mac에서는 LF, windows에서는 CRLF)
\ r = 캐리지 리턴 (CR)

bar :
\ r은 개행 문자입니다.
\ n = null 바이트.

더 길다 : (아스키 번호 포함)

NUL = 0x00 = 0 = CTRL @
LF = 0x0A = 10 = CTRL J
CR = 0x0D = 13 = CTRL M

다음은 ASCII 제어 문자 목록입니다. CTRL v CTRL --- key --- 를 통해 vim 삽입하십시오.
bash 나 다른 유닉스 / 리눅스 쉘에서 CTRL --- key --- 만 입력하면됩니다. 리눅스 시스템이 라인 구분을 위해 라인 피드를 사용하더라도 쉘이 의미하는 바를 알기 때문에 bash에서 CTRL M 을 시도해보십시오.

리터럴을 bash에 삽입하려면 CTRL v 를 사용하여 리터럴을 추가하면됩니다.

bash로 시도해보십시오.

echo ^[[33;1mcolored.^[[0mnot colored.

이것은 ANSI 이스케이프 시퀀스를 사용하고 CTRL v ESC 를 통해 두 개의 ^[ '를 삽입하십시오.

CTRL v CTRL m ENTER를 눌러 보십시오.

bash: $'\r': command not found

위에서 기억하고 계신가요? :>

ASCII 제어 문자 목록은 CTRL (haha)을 통해 콘솔 / pseudoterminal / vim에 삽입되는 제어 문자를 찾을 수 있다는 점에서 완전한 ASCII 기호 표 와 다릅니다. 반면 C와 다른 대부분의 언어에서는이 '문자'를 나타내는 데 8 진수 코드를 사용합니다.

이 모든 것이 어디에서 왔는지 정말로 알고 싶다면 http://www.linusakesson.net/programming/tty/ .
이것은 당신이이 주제에 관해 알게 될 최고의 링크이지만 조심하십시오 : 드래곤이 있습니다.

TL, DR

보통 foo = \n , bar = \r .


그 트릭은 다음과 같습니다.

먼저 vi (m) 세션을 특수 문자 (예 : 개행)와의 패턴 일치를 허용하도록 설정하십시오. 이 줄을 .vimrc 또는 .exrc 파일에 넣는 것이 좋습니다.

:set magic

다음을 수행하십시오.

:s/,/,^M/g

^M 문자를 얻으려면 Control -v 를 치고 Enter를 누르 십시오 . Windows에서는 Control -q , Enter를 누릅니다 . 내가 이것을 기억할 수있는 유일한 방법은 그들이 얼마나 작은 의미인지를 기억하는 것이다.

A : 개행을 나타내는데 사용하는 가장 나쁜 제어 문자는 무엇입니까?

B : Control + c 를 실수로 입력하고 편집기를 죽이는 것이 쉽기 때문에 q (보통 "종료"를 의미하기 때문에) 또는 v .

A : 그렇게해라.


전체 파일을 처리해야하는 경우 명령 줄에서 시도해 볼 수도 있다고 제안되었습니다.

sed 's/\\n/\n/g' file > newfile

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

:%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은 파일 형식 설정에 따라 파일로 저장 될 때 줄 바꿈 문자를 변환하므로 사안을 혼동시킬 수 있습니다.


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


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

---- 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"키를 누릅니다.


대량 텍스트 조작!

통과 매크로 :

  • 녹음 시작 : qq
  • 물건을하십시오.
  • 녹음 중지 : q
  • 반복 : 그 후 @q(처음) @@.
  • 20 회 반복 : [email protected]@

또는 정규식을 통해 :

  • 물건 교체 : :%s/[fo]+/bar/g

(그러나 경고 : 만약 당신이 후자를한다면, 당신은 2 가지 문제를 가질 것이다.)





vim replace escaping newline vi