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

첫 줄과 마지막 줄을 건너 뛰고 파일을 에코 할 수있는 간단한 방법이 있습니까? head에서 tail 로의 배관을 살펴보고 있었지만, 처음부터 전체 라인을 알아야 할 것 같습니다. split도 살펴보고 있었지만 그 방법도 모르겠습니다.

답변

sed 만 사용, 파이프 없음 :

sed "1d;$d" file.txt 

참고

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

답변

미리 줄 수를 알 필요는 없습니다. tailhead는 각각 파일의 시작 또는 끝에서 오프셋을 취할 수 있습니다.

이 파이프는 다음에서 시작합니다. 파일의 두 번째 줄 (첫 번째 줄 건너 뛰기)이고 마지막 줄에서 중지합니다 (마지막 줄 건너 뛰기). 시작 또는 끝에서 두 줄 이상을 건너 뛰려면 그에 따라 숫자를 조정합니다.

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

반대로 수행하면 물론 동일하게 작동합니다.

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

댓글

  • 나는 '하지 않습니다. 이유를 알지만 head -n -1는 Ubuntu 14.04.2LTS에서 내 .txt 파일의 첫 번째 줄과 마지막 줄을 제거합니다.
  • MacOS에서 head -n -1head: illegal line count -- -1
  • head -n -1가 GNU coreutils, MacOS에 BSD 변형이있을 수 있습니까?

Answer

:

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

sed의 또 다른 방법 :

sed "1d;x" file.txt 

x는 고급 sed 명령으로 현재 줄을 이전 것 : 전류가 버퍼로 들어가 이전 sed가 한 줄씩 스트림을 처리하는 동안 s가 화면으로 이동합니다 (첫 번째 줄이 비어있는 이유).

awk 각 단계 (줄)의 솔루션은 현재 줄을 변수에 넣고 두 번째 줄이 지나간 후에 만 인쇄를 시작합니다. 따라서 우리는 화면에 두 번째에서 마지막까지 단 하나의 줄 순서를 얻었습니다. 줄이 변수에 있고 다음 단계에서만 인쇄되어야하므로 마지막 줄은 생략되지만 모든 단계가 이미 실행되어 화면에 줄이 표시되지 않습니다.

:

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

$.는 줄 번호를 나타내고 $_는 현재 줄을 나타냅니다.
perl -n

구조 및 -e는 인라인 스크립트 용입니다.

답변

Mac 사용자의 경우 :

Mac의 경우 head -n -1가 작동하지 않습니다. 대신 파일을 뒤집고 첫 번째 줄을 자른 다음 다시 뒤집습니다.

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

설명 :

  1. tail -r : 입력 줄의 순서를 반대로합니다.

  2. tail -n +2 : 모든 l을 인쇄합니다. 입력의 두 번째 줄부터 시작하는 ines

설명

답변

파이썬에서는 이렇게합니다.

#!/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 

댓글

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다