Vi 편집기 : 파일에서 여러 행을 삭제하는 가장 빠른 방법은 무엇입니까?


12

Vi 편집기를 사용하여 파일에서 여러 행을 삭제하고 싶습니다. 아이디어 나 제안을주세요.

내 목표는 다음과 같습니다.

전에:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
.
.
29
30
.
.

후;

1
10
20
30
40
.
.

3
삭제할 행을 어떻게 선택 했습니까? 매 10 행마다 한 줄씩두고 싶습니까?
matzeri

1
행 범위를 삭제할 수 있습니다 ( :[range]d예 : :3,5d3 ~ 5 행 포함).
Bratchley


@ R Ketkaew-숫자 목록을 제거하려고합니까? 아니면 행입니까? 명확히하기 위해 질문을 업데이트 해 주시겠습니까?
DarkHeart

나는 Vi에 대해 묻는 것을 알고 있지만 GNU Sed gsed -n '1p; 0~10p'
로도

답변:


17

매 10 번째 줄을 유지하고 나머지를 삭제하려면 다음을 수행하십시오.

%norm 9ddj

설명:

% 전체 파일

norm "일반 모드"에서 다음 명령을 실행하십시오.

9dd 9 줄 삭제

j 한 줄 아래로 이동 (즉 유지)

참고 : 첫 번째 행이 삭제됩니다.

http://www.rayninfo.co.uk/vimtips.html 에서 채택


또는 전역 명령을 사용하십시오.

  • 첫 줄을 복제 ggYP
  • :g/^/+ d9

/programming/1946738/vim-how-to-delete-every-second-row 에서 적응


또는 다음을 사용할 수 있습니다 awk.

%!awk 'NR \% 10 == 0 || NR == 1'

awk 명령이 저에게 효과적입니다. 나는 항상 awk가 최소 하나의 블록을 필요로한다고 생각했다 {...}. 당신이하지 않는 것을 알고 반갑습니다. 내가 일한 첫 번째 사소한 awk 명령입니다!
the_velour_fog

1
@the_velour_fog 블록 필요합니다. 글을 쓰지 않으면 AWK는 글을 쓴 것처럼 행동합니다{ print $0 }
shadowtalker

@RKetkaew 어떤 옵션을 사용하셨습니까? 답변이 문제를 해결하는 경우 체크 표시를 클릭하여 답변으로 표시하십시오.
underscore_d

@underscore_d 안녕하세요, DarkHeart에서 제안한 명령을 사용했습니다. 귀하의 의견에 감사드립니다.
rangsiman

12
:2,$v/0$/d

0두 번째 줄 부터 끝나지 않는 줄을 삭제합니다 .


2
이것이 현명한 해결책입니다. 난 그냥 설명을 추가 할 것 2,$범위이며, 명령을 사용합니다. 일치하지 않는 모든 행에서 실행 되는 regex 및 ex 명령 은 어디에 있습니까 ? v/0$/dg!0$d
grochmal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.