첫 줄과 마지막 줄없이 파일 내용 인쇄


54

첫 줄과 마지막 줄을 건너 뛰고 파일을 에코 할 수있는 간단한 방법이 있습니까? 나는에서 배관보고 있었다 head으로 tail,하지만 난 처음부터 전체 라인을 알아야 할 것 같은 사람들을 위해 보인다. 나는 또한보고 split있었지만 그것으로 할 수있는 방법을 보지 못했습니다.

답변:


97

sed파이프없이 : 만 사용 하십시오.

sed '1d;$d' file.txt

노트

  • 1첫 번째 줄을 의미
  • d평균 삭제
  • ; 두 명령의 구분 기호입니다
  • $마지막 줄을 의미

36

미리 줄 수를 알 필요가 없습니다. tail그리고 head각각 파일의 시작 또는 끝에서의 오프셋 (offset)를 취할 수 있습니다.

이 파이프는 파일의 두 번째 줄에서 시작하여 (첫 번째 줄을 건너 뛰고) 마지막 줄에서 멈추고 (마지막 줄을 건너 뜁니다). 시작 또는 끝에서 둘 이상의 줄을 건너 뛰려면 그에 따라 숫자를 조정하십시오.

tail -n +2 file.txt | head -n -1

다른 방법으로 진행하면 물론 동일하게 작동합니다.

head -n -1 file.txt | tail -n +2

이유를 모르지만 Ubuntu 14.04.2LTS에서 파일 head -n -1의 첫 번째 줄과 마지막 줄을 제거합니다 .txt.
Sopalajo de Arrierez

9

방법은 다음과 awk같습니다.

awk 'NR>2 {print t} {t=$0}'

또한 다른 방법 sed:

sed '1d;x' file.txt

x고급 sed명령 인 경우 현재 행을 이전 행으로 전환합니다. 현재 행이 버퍼로 이동하고 이전이 화면으로 이동하는 등 sed한 줄씩 스트림 을 처리 하는 동안 (첫 번째 행이 비어있는 이유).

awk각 단계 (라인)의 솔루션은 현재 라인을 변수에 넣고 두 번째 라인이 지나간 후에 만 ​​인쇄를 시작합니다. 따라서 화면의 두 번째 줄에서 마지막 줄까지 줄이 연속적으로 나타납니다. 마지막 행은 변수에 있기 때문에 생략되고 다음 단계에서만 인쇄되어야하지만 모든 단계가 이미 실행되어 화면에 해당 행이 표시되지 않습니다.

같은 아이디어 perl:

perl -ne 'print $t if $.>2 ; $t=$_' file.txt

$.줄 번호와 $_ 현재 줄을 나타냅니다. 구조의
perl -n지름길이며 인라인 스크립트입니다.while(<..>) {..}-e


2

파이썬에서 나는 이것을 좋아할 것입니다.

#!/usr/bin/python3
import re
import sys
file = sys.argv[1]
with open(file, 'r') as f:
    L = []
    for line in f:
        line = re.sub(r'\n', r'', line)
        L.append(line)
    print('\n'.join(L[1:-1]))

위 코드를 파일에 붙여넣고 이름을로 지정하십시오 script.py. 확인할 파일에 대해 스크립트를 실행하십시오.

python3 script.py /path/to/the/file

예:

$ cat file
foo
apple
banana
bar
$ python3 script.py file
apple
banana

2

Mac 사용자의 경우 :

Mac에서는 head -n -1작동하지 않습니다. 대신 파일을 뒤집고 첫 번째 줄을 잘라낸 다음 다시 뒤집으십시오.

tail -r file.txt | tail -n +2 | tail -r

설명:

  1. tail -r : 입력에서 라인 순서를 반대로 바꿉니다.

  2. tail -n +2 : 입력에서 두 번째 줄부터 시작하여 모든 줄을 인쇄합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.