문제

하나하나 교체하려고 하는데 , 현재 파일에서 새 줄로:

:%s/,/\n/g 

하지만 다음과 같은 내용을 삽입합니다. ^@ 실제 줄 바꿈 대신.파일이 DOS 모드나 다른 모드에 있지 않습니다.

어떻게 해야 하나요?

저처럼 궁금하신 분들은 질문을 확인해보세요 Vim에서 이 개행 문자인 이유는 무엇인가요? 또한.

도움이 되었습니까?

해결책

사용 \r 대신에 \n.

다음으로 대체 \n 텍스트에 널 문자를 삽입합니다.개행 문자를 얻으려면 다음을 사용하십시오. \r.언제 수색 개행의 경우 여전히 사용합니다 \n, 하지만.이러한 비대칭성은 다음과 같은 사실에 기인합니다. \n 그리고 \r 약간 다른 일을 해라:

\n 줄 끝(개행)과 일치하는 반면 \r 캐리지 리턴과 일치합니다.반면에 대체에서는 \n null 문자를 삽입하는 반면 \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 바이트를 삽입했습니다.

다른 팁

비결은 다음과 같습니다.

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

:set magic

다음으로 다음을 수행하세요.

:s/,/,^M/g

얻으려면 ^M 문자, 종류 제어-V 그리고 치다 입력하다.Windows에서는 다음을 수행하십시오. 제어-, 입력하다.내가 이것들을 기억할 수 있는 유일한 방법은 그것들이 얼마나 별 의미가 없는지를 기억하는 것입니다.

ㅏ: 개행 문자를 나타내는 데 사용할 수 있는 최악의 제어 문자는 무엇입니까?

비: 어느 하나 q (대개 "종료"를 의미하기 때문입니다) 또는 v 왜냐하면 입력하기가 너무 쉬울 것이기 때문입니다. 제어- 실수로 편집자를 죽여버리세요.

ㅏ: 그렇게 만들어.

구문에서 s/foo/bar \r 그리고 \n 문맥에 따라 다른 의미를 갖습니다.


짧은:

을 위한 foo:
= 개행 문자(Linux/mac에서는 LF, Windows에서는 CRLF)
= 캐리지 리턴(CR)

을 위한 bar:
= 개행입니다
= 널 바이트.

더 길게:(아스키 숫자 포함)

NUL = 0x00 = 0 = CTRL 키@
LF = 0x0A = 10 = CTRL 키제이
CR = 0x0D = 13 = CTRL 키

다음은 목록입니다. ASCII 제어 문자, 에 삽입하세요. vim ~을 통해 CTRL 키VCTRL 키---열쇠---.
~ 안에 bash 또는 다른 유닉스/리눅스 쉘에서는 다음과 같이 입력합니다. CTRL 키---열쇠---.노력하다 CTRL 키 bash에서는 타격과 동일합니다. 입력하다, Linux 시스템이 줄 구분을 위해 줄 바꿈을 사용하더라도 쉘은 의미를 인식합니다.

bash에 리터럴을 삽입하려면 CTRL 키V 또한 작동합니다.

Bash에서 시도해 보세요:

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

이는 다음을 사용합니다. ANSI 이스케이프 시퀀스, 두 개를 삽입 ^[~을 통해 CTRL 키VESC.

시도해 볼 수도 있습니다. CTRL 키VCTRL 키입력하다, 다음을 제공합니다.

bash: $'\r': command not found

기억하세요 \r 위에서?:>

이것 ASCII 제어 문자 목록이 전체 목록과 다릅니다. ASCII 기호 테이블, 콘솔/의사 터미널/vim에 삽입되는 제어 문자는 CTRL 키 열쇠(하하), 거기에서 찾을 수 있어요.반면 C와 대부분의 다른 언어에서는 일반적으로 이러한 '문자'를 나타내기 위해 8진수 코드를 사용합니다.

이 모든 것이 어디서 왔는지 정말로 알고 싶다면: http://www.linusakesson.net/programming/tty/.
이 주제에 관해 접할 수 있는 가장 좋은 링크는 다음과 같습니다. 하지만 주의하세요.용이 있습니다.


TL;DR

대개 foo = \n, 그리고 bar = \r.

당신은 사용해야합니다

:%s/,/^M/g

얻으려면 ^M 문자, 누르기 Ctrl 키 V 이어서 입력하다

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

Windows에서 Vim 사용 Ctrl 키+ 대신에 Ctrl 키+V

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

그래서 다시 말하면:

당신은 사용해야합니다 \r 줄 바꿈을 사용하려면(ascii 0x0a, 유닉스 줄 바꿈) 정규식 대체에 있지만 이는 대체에 특유한 것입니다. 일반적으로 계속 사용할 것으로 예상해야 합니다. \n 줄바꿈용 및 \r 캐리지 리턴용.

이는 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>

참고: ^M (Linux의 Ctrl-V Ctrl-M)은 다른 사람들이 조언한 대로 캐리지 리턴 대신 정규식 대체에 사용될 때 개행을 삽입합니다(방금 시도했습니다).

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

일식에서, ^M 문자를 한 줄에 포함할 수 있으며 이를 개행 문자로 변환하려고 합니다.

:s/\r/\r/g

하지만 대체해야 한다면 다음이 작동합니다.

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

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

line1
line2
line3

로 변경됩니다

line1
|-
line2
|-
line3

전체 파일에 대해 작업을 수행해야 하는 경우 명령줄에서 시도해 볼 수도 있다는 제안도 있었습니다.

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

나에게 도움이 된 대답은 다음과 같습니다.이 사람에게서

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


또 해야 할 일이 있는데 기억이 나지 않아서 찾아보아야 합니다.

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

:%s/look_for/replace_with^m/g 위의 명령은 "Xook_for"의 모든 인스턴스를 "replace_with n"( n 의미 Newline)로 대체합니다.

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


라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top