Vim을 사용하여 텍스트 파일을 자르는 방법

Vim을 사용하여 텍스트 파일을 자르는 방법

vim을 사용하여 텍스트 파일을 자르는 방법은 무엇입니까? 예를 들어, 파일을 위치 56으로 자르고 싶습니다. 따라서 위치 1-56의 모든 내용을 유지하고 위치 57(포함)부터 각 줄 끝까지의 모든 내용을 삭제하고 싶습니다.

텍스트 파일:

Web Application - http://sharepoint

Url                                                     CompatibilityLevel
---                                                     ------------------
http://sharepoint                                       15
http://sharepoint/sites/appcatalog                      15
http://sharepoint/sites/devtest                         15
http://sharepoint/sites/publishing                      15

awk를 사용하면 내가 원하는 것을 어느 정도 얻을 수 있습니다.

$awk '{print $1}' file

결과:

Web

Url
---
http://sharepoint
http://sharepoint/sites/appcatalog
http://sharepoint/sites/devtest
http://sharepoint/sites/publishing

그런데 따지고 싶다고 하면 꼭 타이틀을 유지하고 싶다. vim을 사용하여 이 파일을 기술적으로 56 위치로 자르려면 어떻게 해야 합니까? 바람직하게는 vim에서. vim에서 파일을 열었다는 의미입니다.

답변1

이를 수행하는 방법에는 여러 가지가 있으며, 그 중 일부는 다음과 같습니다.

  1. :%s/\%>56c.//g
  2. :%s/\%57c.*//
  3. :%s/\v^.{56}\zs.*//
  4. :% normal 57|D(이 가설 virtualedit=all또는 virtualedit=onemore)
  5. Shift-g57|Ctrl-v1Shift-gEndx(이 가정 virtualedit=all)

편집하다:요청에 따라 매뉴얼에서 관련 역류를 추가했습니다.

  • 1.과 2. ( :h /\%c)의 경우:

    \%23c 특정 열을 일치시킵니다.
    \%<23c 특정 열을 일치시키기 전에.
    \%>23c 특정 열을 일치시킨 후.
    이 세 가지를 사용하여 버퍼나 문자열의 특정 열을 일치시킬 수 있습니다. "23"은 임의의 열 번호일 수 있습니다. 첫 번째 열은 1입니다. 실제로 열은 바이트 수입니다(따라서 멀티바이트 문자의 경우 정확하지 않습니다).

  • 3.( :h \zs)의 경우:

    \zs 어디에서나 일치하고 일치 시작을 설정합니다. 다음 문자는 전체 일치의 첫 번째 문자입니다.

  • 4.( :h |, :h D, :h :normal, :h :%, :h 'virtualedit')의 경우:

    | 현재 행의 열 [개수]를 필터링합니다. 독점 모션. 시시는 파이프가 아니다

    ["x]D 줄 끝까지 커서 아래의 문자를 삭제한 다음 [count]-1 줄을 [레지스터 x로] 삭제합니다. "d$"의 동의어입니다.

    :norm[al][!] {commands}일반 모드 명령 {commands}을 실행합니다. 이를 통해 명령줄에 입력된 일반 모드 명령을 실행할 수 있습니다. {commands}는 입력한 것처럼 실행됩니다.

    % 같음 1,$(전체 파일)

    'virtualedit' 쉼표로 구분된 단어 목록:
    block 시각적 블록 모드에서 가상 편집이 가능합니다.
    insert 삽입 모드에서 가상 편집을 허용합니다.
    all 모든 모드에서 가상 편집이 가능합니다.
    onemore 커서가 줄 끝을 지나 이동하도록 허용

    가상 편집이란 실제 문자가 없는 곳에 커서를 위치시킬 수 있다는 의미입니다. 이는 탭 중간이나 줄 끝 너머에 있을 수 있습니다. 시각적 모드에서 직사각형을 선택하고 테이블을 편집하는 데 유용합니다.

  • 5.( :h G, :h CTRL-V, :h <End>, :h x)의 경우:

    G 기본값이 마지막 줄인 [count] 줄로 이동하여 공백이 아닌 첫 번째 문자를 한 줄씩 찾습니다.

    [count]CTRL-V 블록별로 시각적 모드를 시작합니다.

    $아니면 <End>줄 끝까지.

    ["x]x커서 아래와 뒤의 [count] 문자를 [x를 등록하기 위해] 삭제합니다(한 줄씩 삭제하지 않음). "dl"과 동일합니다.

답변2

"위치"가 "열"을 참조한다고 가정하면 정규식을 사용할 수 있습니다

:%s/^\v(.{56}).*/\1/

^이는 Perl( \v마법)이 줄의 시작 부분부터 시작하여 .56번 일치하고 해당 내용(괄호)을 저장하여 .*줄의 나머지 부분과 일치하도록 대체한다는 의미입니다 \1.

awk어떤 이유로 필터가 불법이 아닌 이상 more 또는 less 를 호출할 수도 있습니다 .

:%!awk '{print $1}'

답변3

vim에서 {print $1}헤더를 제외한 모든 것을 얻으려면 다음을 시도하십시오.

:2,$s/ .*// 

관련 정보