Vim에서 두 번째 열을 삭제하는 방법?


12

다음과 같이 탭으로 구분 된 파일이 있습니다.

name1   verb1   name2   verb2   etc...

두 번째 열을 삭제하고 싶습니다. 나는 중 하나 편집 시도 이러한 대답을 하지만, 익숙하지 않은 것 sed그리고 awk내가 할 수 없었다.

누구든지 나를 도울 수 있습니까?


@Kasiy OP의 원본은 \ t를 사용하여 탭을 나타 냈습니다.
steeldriver

@steeldriver 그래, 맞아. 나는 그것이 줄의 일부라고 생각했다. 제거되었습니다. 그러나 나는에 따라 정확한 위치에 편집 된 첫 번째 게시물의 .thanks
αғsнιη

1
vim 비주얼 블록 모드로 문제가 해결되지 않습니까? (정상 모드에서 ctrl-v, x삭제할 열을 선택하십시오 )?
Rmano

@Rmano 감사하지만 도움이되지만 비주얼 모드에서 파일 끝으로 이동하는 방법을 알려주시겠습니까? (Ctrl G를 시도했지만 작동하지 않습니다).
teaLeef

답변:


10

vim에서는 다음 명령을 사용할 수 있어야합니다

:%s/\t[^\t]*//

(대체 TAB뒤에 0이 아닌 문자 TAB가없는 경우). 파일은 두 개의 열이있는 경우 당신은 약간 간단하게 사용할 수있다 :%s/\t.*거나 :%s/\t.*$하는 첫 번째 교체 TAB모든 행의 마지막까지 다음 문자.


22

허용 된 답변은 이것보다 훨씬 우아합니다 (공개했습니다!). 기억하지 못하는 경우 vim 시각적 블록 모드를 직접 사용할 수 있습니다. vim을 열고 다음과 같이 열의 첫 번째 모서리로 이동하십시오 (일반 모드).

여기에 이미지 설명을 입력하십시오

입력 CTRL-V하고 커서를 움직여 열을 선택할 수 있습니다.

여기에 이미지 설명을 입력하십시오

끝으로 가려면 G:

여기에 이미지 설명을 입력하십시오

우리가 비어있는 마지막 줄에 있기 때문에 블록이 깨진 것처럼 보입니다. 간단히 한 줄 위로 (위 화살표 또는 k) 사용하여 다시 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오

이제 단순히 x블록을 삭제하려면을 누르십시오 .

여기에 이미지 설명을 입력하십시오


6

나는 cut이것을 위해 사용할 것이다

cut -f1,3- file.txt > newfile.txt
mv newfile.txt file.txt

이것을 vim 내에서 필터로 사용할 수도 있습니다 (이것은 파일의 모든 줄을 대체합니다; 예를 들어 2-9 줄을 처리하거나 2,9대신 %원하는 줄을 선택할 수 있습니다 V).

:%!cut -f1,3-

-f1,3-'필드 1을 인쇄 한 다음 행 끝까지 필드 3 및 모든 필드를 인쇄합니다'를 의미합니다. 기본적 cut으로 탭을 구분 기호로 사용합니다. 다른 것이 필요한 경우 -d옵션을 사용하십시오 (참조 man cut).


4

다음 중 하나를 시도 할 수 있습니다.

:%norm WdW

또는 시각적 모드를 사용하여 수동으로 :

  1. 두 번째 열로 이동합니다 (예 :) W.
  2. 로 시각 차단을 시작하세요 Ctrl+v.
  3. 두 번째 열을 선택하십시오 (예 : W, G).
  4. 를 눌러 삭제하십시오 d.

명령 행에서 대신 수행하려면 다음을 시도하십시오.

$ ex +':exe ":%norm f\<Tab>dE"' -scx file

관련 : 모션에 사용할 탭 키의 리터럴을 작성하는 방법은 무엇입니까?

또한보십시오:


예, +1. 그러나 3 단계 마지막에 빈 줄이 있으면 잘못 될 수 있습니다.
Rmano
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.