외부 필터로 Ex
사용 하는 명령을 사용 하여이 작업을 수행 할 수도 있습니다 sed
.
:%!sed -n 'h;n;G;h;n;G;h;n;G;p'
이 버전은 4의 배수를 초과하는 추가 행을 무시 (삭제)합니다. 마지막 4 행 미만 (역전)을 유지하려면 다음을 사용하십시오.
:%!sed -n '$p;h;n;G;$p;h;n;G;$p;h;n;G;p'
는 %
여기에 "버퍼의 모든 라인"을 의미합니다.
!
명령 수단은 "입력으로 지정된 라인의 다음 명령을 실행하고, 대체 명령의 출력이 지정된 라인." (필터라고 부릅니다. 예를 들어 :%!sort
파일의 모든 행을 정렬하고 :2,8!sort
2-8 행을 정렬하는 등 정렬과 같은 작업에 매우 편리합니다 .)
sed
는 IS 스트림 편집기 도구를 모든 유닉스 계열 시스템에 있습니다. 여기서 sed
사용되는 주요 개념은 "패턴 공간"(기본적으로 입력의 각 줄을 차례로 포함 함)과 "보유 공간"(다른 공간 sed
을 처리 하는 동안 사용하여 추가 텍스트 를 저장 하는 데 사용할 수있는 공간)입니다. 입력 라인).
-n
sed
패턴 공간을 인쇄하는 기본 동작을 억제 하는 명령 의 옵션입니다 (이 경우 명시 적으로 말할 때만 인쇄하기 때문에).
$p
sed
명령 에서 "의 마지막 행에있는 경우 sed
인쇄하십시오 (패턴 공간)".
h
"홀드 스페이스"에있는 '패턴 스페이스'의 현재 내용을 붙여서 존재하는 내용을 덮어 씁니다. "
n
"패턴 공간"의 내용을 입력에서 다음 줄로 바꾸십시오. "
G
" '패턴 공간'에 추가 : 줄 바꿈 뒤에 '보유 공간'의 내용이 추가됨"을 의미합니다.
모두 합쳐서, sed
명령은 네 줄의 출력을 저장하고, 저장하는대로 되 돌린 다음 인쇄합니다. $p
번째 버전에서 추가 명령은 파일의 마지막 행은 4 개의 배수 라인에 이외 도달하면, 라인은 여전히 인쇄되도록.
Vim 관련 기능을 사용하지 않고 외부 필터를 사용하지 않는 대체 대화식 접근 방식의 경우 :
:4
네 번째 줄로 이동합니다.
:.m -4 | +3m . | +2m . | +5
앞의 네 줄 (1-4)을 뒤집고 커서를 줄 8에 둡니다.
.m -4
단지 현재 라인으로 이동 한 후 (이동 된 줄에 커서를 떠나) 라인 네 개의 선 다시.
+3m .
커서를 이동 한 줄에 그대로두고 현재 줄 바로 다음 으로 3 행인 줄 을 현재 줄 바로 다음으로 이동합니다. +2m .
물론 동일하게 작동합니다.
+5
커서를 원래 위치에서 다섯 줄 아래로 놓습니다.
원하는대로 반복하십시오.
Vim에서이 전체 명령을 @:
로 반복 한 다음로 다시 반복 할 수 있습니다 @@
. POSIX에서 vi
또는 ex
당신이해야 삽입 :.m -4 | +3m . | +2m . | +5
, 텍스트 행으로 명명 된 버퍼 (레지스터)에 삭제 한 다음 명명 된 버퍼 (레지스터)를 실행합니다.
따라서 ex
모드에서 POSIX 지정 기능 만 사용하여 대화식으로 줄을 바꾸고 17 줄의 텍스트로 시작합니다.
Entering Ex mode. Type "visual" to go to Normal mode.
:0a # Append following text after "line 0" (i.e. insert at start of file).
.m -4 | +3m . | +2m . | +5
. # End text insertion
:d k # Delete that line to register k
line1 # This is a printout of the current line
:4 # Move to line 4
line4
:@k # Execute register k to reverse lines 1-4
line8
:@@ # Execute register k again
line12
:@@ # Execute register k again
line16
:@@ # Execute register k again
line17
:%p # Print the whole buffer (just to see what was done)
line4
line3
line2
line1
line8
line7
line6
line5
line12
line11
line10
line9
line16
line15
line14
line13
line17
:wq # Save and quit
더 읽을 거리 :